使用POJO构造函数(无实体)的Hibernate JoinColumn

时间:2019-10-28 22:14:50

标签: java hibernate jpa criteria

我有一个看起来像这样的POJO

@AllArgsConstructor
public class POJO {
  @Getter
  @Setter
  private String name;

  @Getter
  @Setter
  private int age;
}

我使用此POJO设置

中的hql查询中的值
session.createQuery("Select new fullyQualifiedName.POJO(emp.name, emp.age) From Employee emp where emp.id = 1");

最近,有人要求我请求将List属性添加到POJO。就像

@AllArgsConstructor
public class POJO {
  @Getter
  @Setter
  private String name;

  @Getter
  @Setter
  private int age;

  @Getter
  @Setter
  private List<Hobby> hobbies;
}

但是,在这一点上,我不知道如何加入 Hobby 表,如何将值作为列表获取并传递给构造函数。

完成此操作的可能方法是什么?

1 个答案:

答案 0 :(得分:1)

我认为您无法再通过new关键字来实现所需的功能。也许其他人可能对此结构更有用,但是我还没有看到任何示例提供带有new关键字的集合。我认为这种构造有一些局限性。

关于我提出的解决方案:

  1. 将查询更改为Select emp, h From Employee emp left join Hobby h where emp.id = 1。您还可以根据使用情况使用内部联接。

  2. 为查询对象设置自定义ResultTransformer。像这样:


    query.setResultTransformer(
        new ResultTransformer() {
            @Override
            public Object transformTuple(Object[] tuple, String[] aliases) {            
                return tuple;
            }
            @Override
            public List transformList(List collection) {
               //Each member of collection is a Object[], we are working at row level 
               //You should process the collection, eliminate duplicates etc and return a 
               //List containing a single POJO object
            }
        }
    );