[英]JPA select query
经过2小时的徒劳研究,我才创建了这个主题。
我正在尝试做一个非常简单的汽车位置代码,该代码可以保存数据库中的数据并将其删除。
所以我的问题是我有一个名为Vehicule的父母班和两个孩子班:汽车和货车。 下面是我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表上有一个字段名称“ vehicule_type”,则必须在代码中使用名称“ vehiculeType”指定它
只需尝试将“ vehicule_type”更改为“ vehiculeType”
但是,要获得更多帮助,我认为您必须提供Vehicle实体类的内容。
干杯
是否有名称为vehicule_type的字段? 我怀疑它不存在,并且您正以某种方式尝试访问它,从而导致异常。
您无需在其中插入区分值的标准。 JPA本身就是这样做的。 您只需要选择正确的实体。
在您的情况下,您应该只选择:“ SELECT v FROM Car v”。 如果在配置中打开show_sql,您会看到JPA会自动在其中添加aliasXX.vehicule_type ='Car'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.