java - Hibernate/JPA 查询连接子类的可嵌入属性

标签 java hibernate jpa

我有以下实体: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/

相关文章:

java - 如何更改 Java Swing TextArea 中的突出显示颜色?并且,更改与突出显示位置对应的文本开头

java Callable FutureTask Excecuter : How to listen to finished task

java - 如何防止 JCheckBoxMenuItem 单击后关闭?

java - 实体未找到异常 : deleted entity passed to persist

java - 异常 [EclipseLink-3002](Eclipse 持久性服务 - 2.6.2.qualifier): org. eclipse.persistence.exceptions.ConversionException

java - java 中的参数检查或契约设计 (GWT)。从哪儿开始?

java - 如何在 hibernate 中检索关系映射?

java - 为什么我的实体不能与 SpringBoot 一起工作,尽管它可以在没有 SpringBoot 的情况下工作

java - JPA 如何为 @OneToMany 关系的列添加唯一约束,如用户名

java - Apache Cassandra 的高级 Java 客户端选择