【发布时间】:2017-04-25 04:25:27
【问题描述】:
经过 2 小时徒劳的研究,我正在创建这个主题。
我正在尝试做一个非常简单的汽车位置代码,它可以保存、从数据库中删除获取数据。
所以我的问题是我有一个名为 Vehicule 的父类和 2 个子类:汽车和货车。 下面是我的3堂课的开始
// 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
}
我将它们存储在一个表中,继承策略 = 单个表。 现在,我想只选择汽车或货车。
我试过了
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 自行附加它,因为您说 select from Vehicule... 尝试 SELECT v FROM Vehicule v
-
标签: java sql jpa jpql discriminator