【问题标题】:HQL Object set from set来自集合的 HQL 对象集
【发布时间】:2011-10-24 18:45:05
【问题描述】:

我在一个非 Hibernate 对象中获得了一个 Set<UserDTO> 集合,我在 Hibernate 中获得了一个 User 域实体。

UserDTO 包含的用户信息较少(只有 id 和 name)

如何从 DTO 对象中选择完整的 Hibernate 用户 Set/List

像这样?

Set<UserDTO> setDTO = .....
String hql = "FROM User WHERE id IN (:userDTO )";
Query query = entityManager.createQuery(hql); 
query.setParameter("userDTO", setDTO);
return query.getResultList();

谢谢

【问题讨论】:

    标签: java hibernate hql


    【解决方案1】:

    几乎。但是您必须先在单独的集合中提取 ID:

    Set<Long> ids = new HashSet<Long>(setDTO.size());
    for (UserDTO dto : setDTO) {
       ids.add(dto.getId());
    }
    

    然后继续查询,并将ids 集作为参数传递。

    【讨论】:

      【解决方案2】:

      不要忘记您需要使用 Query#setParameterList() 而不是 Query#setParameter。

      【讨论】:

      • 我认为,无论哪种方式都可以。虽然如果你知道它是一个列表(在这种情况下是 Set),你应该使用更具体的方法
      • 可能。我似乎记得在 setParameter 中努力使用 Collection。是的 setParameterList 实际上需要一个 Collection!
      • 我刚刚尝试为每个方法编写一个测试,如果您将 List 传递给 setParameter,则在执行查询时会收到 ClassCastException。
      • 嗯,也许你是对的。或者跨版本不一致
      • 很可能,这个实验只针对3.6.7!还有更多!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多