【问题标题】:HQL projection on entities/tables实体/表上的 HQL 投影
【发布时间】:2017-08-25 04:06:22
【问题描述】:

我有两张具有一对一关系的表 - 人和房子 我尝试使用像 Select p.name, p.dob from Person 这样的 HQL 投影,它返回我的名字和 dob 很好。 但是,如果出现以下情况,我不知道如何在 HQL 中使用投影: 1. 我想包括房子 2. 我只想包含颜色和品牌年份。

我尝试了SELECT p.firstName, p.lastName p.house FROM Person p" ,但出现“无法解析属性”的错误。我需要做什么才能做到这一点?谢谢

【问题讨论】:

    标签: hibernate hql projection


    【解决方案1】:

    使用HQL其实很简单:

    SELECT p.firstName, p.lastName, h.color, h.year FROM Person p join p.house h
    

    这将返回一个包含这些值的数组。


    对于您的第二条评论,是的,您可以使用 DTO 来执行此操作,例如

    class PersonDTO {
        String firstName;
        String lastName;
        Hourse hourse;
        public PersonDTO(){}
    
        public PersonDTO(String firstName, String lastName, Hourse hourse) {
            this.firstName = firstName;
            this.lastName = lastName;
            this.hourse = hourse;
        }
    
        // getter & setter
    } 
    

    然后在你的 HQL 中,你可以像这样返回它 SELECT new PersonDTO(p.firstName, p.lastName, h) FROM Person p join p.house h

    【讨论】:

    • 谢谢。我能够得到那个值。但是是否有可能获取完整的 House 对象并将其映射到 DTO?所以我的 Person 对象由于 Object[] 需要手动映射,但是 House 是完整返回的?
    • 我试过了:SELECT p.firstName, p.lastName, h FROM Person p join p.house h 它没有给我错误但它返回 null... 你能帮忙?
    猜你喜欢
    • 2014-08-20
    • 2015-12-25
    • 2012-07-22
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多