7 hibernate hql resulttransformer
这是一个重要的补充,特别是在能够编写高效的动态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();
Run Code Online (Sandbox Code Playgroud)
工作正常,但如果我只想加载一些父母的属性怎么办?
例如,让我们说,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();
Run Code Online (Sandbox Code Playgroud)
那么任何想法?
你几乎是对的。
\n\n首先,您创建SomeTable
:
class SomeTable {\n private Long stNumber;\n private Date stDate;\n private String someParentField;\n\n //getters and setters\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n和你的查询:
\n\nsession.createQuery(\n "select st.stNumber as stNumber, st.stDate as stDate, someParent.someParentField as someParentField "\n + " from SomeTable st "\n + " JOIN st.someParent someParent"\n + " where st.someTableId < 1000")\n .setResultTransformer( Transformers.aliasToBean(SomeTable.class))\n.list();\n
Run Code Online (Sandbox Code Playgroud)\n\n在这种情况下,您不需要为该类创建构造函数SomeTable
。
归档时间: |
|
查看次数: |
3749 次 |
最近记录: |