我在2小時的研究之後創建了這個主題。JPA select查詢
我想做一個非常簡單的汽車位置代碼,它可以保存,刪除從數據庫中獲取數據。
所以我的問題是我有一個父類名爲Vehicule和2個孩子類:汽車和麪包車。 下面,有
// 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
}
我將它們存儲在inheritanceStratregy =單表中的單個表我的3個班的開始。 現在,我想選擇只有汽車或只有麪包車。
我試圖
Query query = em.createQuery("SELECT v FROM Vehicule v WHERE v.vehicule_type = 'Car'");
List<Car> list = (List<Car>) query.getResultList();
,但我得到
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.
我也試過
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();
,但我得到
Caused by: java.lang.IllegalArgumentException: The attribute [vehicule_type] is not present in the managed type
我做錯了什麼?
在此先感謝!
您不需要在條件中附加vehicule_type。 JPA附加它自己,因爲你說選擇從Vehicule ...嘗試SELECT v FROM Vehicule v –
我做了「SELECT v FROM Car v」...「SELECT v FROM Vehicule v」只有在你的車類DiscriminatorValue也是。 –