【问题标题】:Hibernate JoinColumn with a POJO constructor (without an Entity)带有 POJO 构造函数的 Hibernate JoinColumn(没有实体)
【发布时间】:2019-10-28 22:14:50
【问题描述】:

我有一个类似这样的 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");

最近,有人要求我向 POJO 添加一个 List 属性。如,

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

  @Getter
  @Setter
  private int age;

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

但是,此时我不知道如何加入 Hobby 表,以列表的形式获取值并传递给构造函数。

有哪些可能的方法来实现这一点?

【问题讨论】:

    标签: java hibernate jpa criteria


    【解决方案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
                }
            }
        );
    
    

    【讨论】:

      猜你喜欢
      • 2021-06-04
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      • 2017-10-20
      • 2018-01-10
      相关资源
      最近更新 更多