7

这是一个重要的补充,特别是在能够编写高效的动态 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();

那么有什么想法吗?

4

1 回答 1

0

你几乎是对的。

首先,您创建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该类创建构造函数。

于 2018-12-21T14:46:24.243 回答