当加载特定父级或其他映射实体属性时,我们如何修改HQL转换器?

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();

所以有什么想法吗?

1
创建DTO对象并将查询结果转换为该对象 - ali akbar azizkhani
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类创建构造函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接