hibernate - 我们如何在加载特定父级或另一个映射实体属性时修改 HQL 转换器?

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

工作正常,但是如果我只想加载其父级的某些属性怎么办?

例如,让我们说,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/

相关文章:

mysql - 不允许为空,但应该可以为空

java - 在 hibernate 聚合函数中使用函数作为参数

c# - Nhibernate 二级缓存与 AliasesToBean 转换器

java - 如何使用自定义注释存储和加载加密值

java - @OnDelete 仅与 @OneToMany 一起使用

sql - Postgresql 选择第一个字母不是@或#的单词频率

java - hibernate 如何检索层次结构对象

java - Hibernate 中的 ResultTransformer 返回 null

java - Hibernate 4.0 : javax. persistence.criteria.Path.get 在指定复合键字段时失败