Ich erstelle dieses Thema nach 2 Stunden Forschung umsonst.JPA Abfrage auswählen
Ich versuche, eine sehr einfache Auto Standortcode, der speichern konnte, entfernen Daten aus der Datenbank zu entfernen.
Also mein Problem ist, ich habe eine Elternklasse namens Vecicule und 2 Kinder-Klasse: Auto und Van. Unten gibt es den Anfang meiner drei Klassen
// vehicule
@Entity
@Table(name="Vehicule")
@DiscriminatorColumn(name="vehicule_type")
@Inheritance
public class Vehicule implements Serializable{
// some constructors setters and getters here
}
// car
@Entity
@DiscriminatorValue("Car")
public class Car extends Vehicule{
@Column(name = "number_of_seats")
private int nbOfSeats;
// some constructors setters and getters here
}
// van
@Entity
@DiscriminatorValue("Van")
public class Van extends Vehicule{
@Column(name = "max_weight")
private int maxWeight;
// some constructors setters and getters here
}
ich sie in einer einzigen Tabelle mit inheritanceStratregy = single-Tabelle gespeichert. Jetzt möchte ich nur Autos oder nur Vans auswählen.
Ich versuchte
Query query = em.createQuery("SELECT v FROM Vehicule v WHERE v.vehicule_type = 'Car'");
List<Car> list = (List<Car>) query.getResultList();
aber ich habe
Caused by: java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager:
The state field path 'v.vehicule_type' cannot be resolved to a valid type.
Ich habe auch versucht
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Car> q = cb.createQuery(Car.class);
Root<Car> c = q.from(Car.class);
ParameterExpression<String> p = cb.parameter(String.class);
q.select(c).where(cb.equal(c.get("vehicule_type"), p));
TypedQuery<Car> query = em.createQuery(q);
query.setParameter(p, "Car");
List<Car> results = query.getResultList();
aber ich habe
Caused by: java.lang.IllegalArgumentException: The attribute [vehicule_type] is not present in the managed type
Was mache ich falsch?
Vielen Dank im Voraus!
Sie müssen nicht Fahrzeug_Typ in Ihren Kriterien anfügen. JPA hängt es selbst an, weil Sie sagen, aus Vehicule wählen ... versuchen SELECT v FROM Vehicule v –
ich empfange "SELECT v VON Auto v" ... "SELECT v FROM Vehicule v" funktioniert nur, wenn Sie Ihre Vehicule-Klasse geben ein DiscriminatorValue auch. –