这是一个重要的补充,尤其是在能够编写高效的动态 HQL 查询的同时解决性能问题。
但是,我们如何在加载特定父级或其他映射实体属性的情况下修改 HQL 转换器?
以下代码:
session.createQuery(
"select st.stNumber as stNumber, st.stDate as stDate "
+ " from SomeTable st "
+ " where st.someTableId < 1000")
.setResultTransformer( Transformers.aliasToBean(database.SomeTable.class))
.list();
工作正常,但是如果我只想加载其父级的某些属性怎么办?
例如,让我们说,
SomeTable
有一个名为 SomedParent
的父级我只想访问此父级的字段之一?session.createQuery(
"select st.stNumber as stNumber, st.stDate as stDate, st.someParent.someParentField as someParentField "
+ " from SomeTable st "
+ " where st.someTableId < 1000")
.setResultTransformer( Transformers.aliasToBean(database.SomeTable.class))
.list();
那么有什么想法吗?
最佳答案
你几乎是对的。
首先,您创建 SomeTable
:
class SomeTable {
private Long stNumber;
private Date stDate;
private String someParentField;
//getters and setters
}
你的查询:
session.createQuery(
"select st.stNumber as stNumber, st.stDate as stDate, someParent.someParentField as someParentField "
+ " from SomeTable st "
+ " JOIN st.someParent someParent"
+ " where st.someTableId < 1000")
.setResultTransformer( Transformers.aliasToBean(SomeTable.class))
.list();
在这种情况下,您不需要为
SomeTable
创建构造函数。类(class)。
关于hibernate - 我们如何在加载特定父级或另一个映射实体属性时修改 HQL 转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/239045/