java - 带有@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 中是如何实现的。
解决方案
正如@Javalerner 所评论的,您应该使用@OneTomany 并使用 fetch="FetchType.EAGER" 添加 Eager Loading
并删除 Column 注释
@OneToMany(fetch = FetchType.EAGER)
private List<WorkListBean> workList;
推荐阅读
- c++ - 在类之外定义的构造函数的范围是什么?
- javascript - 电报功能与另一个机器人通信
- cookies - 本地主机前端不再向开发后端发送 cookie
- elasticsearch - 动态删除 elasticsearch 集群默认设置
- reactjs - 自定义 404 可以在本地工作,但不能在 Github 页面上的部署环境中工作
- git - Git stash apply,要求提交/存储更改
- javascript - ReactJS:在现有状态转换期间无法更新(例如在 `render` 中)。渲染方法应该是 props 和 state 的纯函数
- angular - 我想在用户在搜索框中输入时过滤我的状态,我正在使用 ngrx
- angularjs - 带有json数据的角度js数据表列过滤器问题
- django - django-awesome-avatar 的异常,ModuleNotFound