我有以下实体:ShoppingCart、抽象类 User 和扩展 User 的 EndUser。 AddressDetails 是嵌入到 EndUser 实体中的可嵌入项。
我的查询如下所示:SELECT sc FROM ShoppingCart sc JOIN sc.endUser as endUser WHERE endUser.name EQ someName and endUser.addressDetails.zip EQ 1234
当我删除 WHERE 子句的第二部分,只保留 endUser.name 部分时,一切正常(name 是 endUser 实体类的属性,而 endUser 实体类是 User 实体类的子类)。 但是,当我尝试整个查询时,我得到:
org.hibernate.QueryException: could not resolve property: zip of:
购物车:
@Entity
public class ShoppingCart {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinTable
private EndUser endUser;
}
用户:
@Entity
public abstract class User {
...
}
最终用户:
@Entity
public class EndUser extends User {
...
@Column
private String name;
@Embeded
private AddressDetails addressDetails;
...
}
详细地址:
@Embeddable
public class AddressDetails {
...
private int zip;
...
}
最佳答案
我确实发现了问题。
当我将 ShoppingCart 和 endUser 之间的 @ManyToOne 关系的 FetchType 更改为 EAGER 时,查询有效。
所以应该是:
@ManyToOne(fetch = FetchType.EAGER)
@JoinTable
private EndUser endUser;
关于java - Hibernate/JPA 查询连接子类的可嵌入属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46901566/