繁体   English   中英

JPA选择查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM