首页 > 解决方案 > 带有@NamedNativeQueries 的休眠实体中的实体列表

问题描述

我有一种情况,我在休眠状态下获得实体列表,但在主实体内部我有另一个实体列表。我使用的实体:

EmpListBean.java

@NamedNativeQueries({
 @NamedNativeQuery(
         name = "EmpList",
         //Actual query involves lot of joins
         query = " SELECT ID , NAME FROM EMPLOYEE WHERE EMP_ID=:EMPID"    
             ,resultClass = EmpListBean.class
         )
})

@Entity
public class EmpListBean {



@Column(name = "ID")
private int id;    

@Column(name = "NAME")
private String empName;

// This is the list i need to retreive
@ManyToOne
@Column(name="workList")   
private List<WorkListBean> workList;

//Getters & Setters

}

工作清单Bean.java

@NamedNativeQueries({
 @NamedNativeQuery(
         name = "WorkListBeanList",
         query = " SELECT ID , NAME FROM Work_List WHERE EMP_ID=:EMPID"    
             ,resultClass = WorkListBean.class
         )
})

@Entity
public class WorkListBean {



@Column(name = "ID")
private int id;    

@Column(name = "NAME")
private String workName;

//Getters & Setters

}

DAO 层

Query query = session.getNamedQuery("EmpList");             
query.setParameter("EMPID", myObj.getEmpId());
List<EmpListBean> oEmpListBean = query.list();

在 DAO 层代码下面执行时,我得到“workList”对象为空,我知道这可以通过单独迭代 EmpListBean 并单独调用 WorkListBean 的命名查询来实现,但由于数据量很大,这样做需要太多时间,所以想知道是否有任何方法可以在 EmpList Bean 中获取 WorkListBean。这里使用的两个实体仅供参考,我使用的实际查询很复杂,无法在本论坛中显示,并且涉及很多表连接,所以请让我知道这在 hibernate 中是如何实现的。

标签: javaspringspring-boothibernatejpa

解决方案


正如@Javalerner 所评论的,您应该使用@OneTomany 并使用 fetch="FetchType.EAGER" 添加 Eager Loading

并删除 Column 注释

@OneToMany(fetch = FetchType.EAGER)
private List<WorkListBean> workList;

推荐阅读