【发布时间】:2021-03-12 21:55:21
【问题描述】:
我有一种情况,我在休眠状态下获得实体列表,但在主实体内部我有另一个实体列表。我使用的实体:
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
}
WorkListBean.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 中实现。
【问题讨论】:
-
workList中的EmpListBean怎么可能是ManyToOne?应该是OneToMany -
是的。我尝试了两种方式,即使我将一对多相同的问题存在。它仍然返回 null
-
好吧,你只获取
ID, NAME! -
为了说明问题,我只使用了 id 和 name,但在实际查询中我获取了大量数据,而且命名查询中也很少发生复杂的连接
-
您应该获取整个实体或执行 dto 投影 vladmihalcea.com/… 。您正在尝试做的是对实体本身执行 dto 投影并期望正确填写剩余字段,这是不正确的。
标签: java spring spring-boot hibernate jpa