hibernate - 当通过 join fetch 获取具有 @OneToOne 的实体时,会急切地获取 @OneToOne
问题描述
我有以下 3 个课程:
public class Object {
...whatever
}
public class CustomerObject {
@OneToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "OBJECT_ID", referencedColumnName = "OBJECT_ID", insertable = false, updatable = false)
private Object object;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CUSTOMER_TYPE_ID", referencedColumnName = "OBJECT_ID", insertable = false, updatable = false)
private CustomerTypeObject customerTypeObject;
}
public class CustomerTypeObject {
@JoinColumn(name = "OBJECT_ID", referencedColumnName = "OBJECT_ID", insertable = false, updatable = false)
@OneToOne(optional = false, fetch = FetchType.LAZY)
private Object object;
}
当我这样做时:
entityManager.createQuery(
"select cust from CustomerObject cust "
+ "left join fetch cust.customerTypeObject customerType "
+ "where cust.id = :customer_id
, CustomerObject.class)
.setParameter("customer_id", BigDecimal.valueOf(1))
.getSingleResult();
Hibernate 发出 1 个查询以获取具有其 customerType 的客户,但随后它也发出查询以获取 CustomerTypeObject 实体中的对象关联。通过连接获取该关联来解决问题(即只发出一个查询):
entityManager.createQuery(
"select cust from CustomerObject cust "
+ "left join fetch cust.customerTypeObject customerType "
+ "left join fetch customerType.object customerTypeObject "
+ "where cust.id = :customer_id
, CustomerObject.class)
.setParameter("customer_id", BigDecimal.valueOf(1))
.getSingleResult();
但我不想这样做。有没有办法做到这一点?(即不要急切地在已经在查询中获取的实体中获取 OneToOne 关联)。
解决方案
推荐阅读
- ruby-on-rails - 在 Rails 中,为什么 `tomorrow` 不是 `today` 的后天?
- mongodb - Mongoose .update() 什么都不做
- python - 如何通过在python中逐个字母和反向打印来打印字符串
- tkinter - 使用按钮导出文件后,如何自动关闭 tkinter 窗口
- c++ - 关于C++中布尔运算符重载的问题
- corda - 在corda中完成交易后如何以成功的JSON格式响应
- python - 更改对应于另一个列表的索引列表中的所有元素
- python - 为什么我的 pygame 应用程序循环不能正常工作?
- python - 提取python文件中指定函数的数据| 添加评论以突出显示已删除的内容
- forms - 在视图行中创建文档。两个或更多表单文档内联在视图中