【问题标题】:HQL how to query ElementCollection of StringHQL如何查询String的ElementCollection
【发布时间】:2012-12-14 22:47:44
【问题描述】:

我有这样的课

public User{
   Long id;
   Set<String> roles;
}

如何查询所有User角色"ADMIN"的对象

编辑:

我使用的是 Hibernate 3.0.5。并尝试了大多数明显的方法。

from Users where roles in('ADMIN') 给出 JDBC 错误。 from Users u where u.roles in('ADMIN') 给出类转换异常

我认为这可能是这个特定版本的休眠的问题。

【问题讨论】:

  • 您有Role 实体吗?一组字符串的作用如何?你是如何映射它的。变量角色是一个瞬态变量吗?实体应该是这样的public User{ Long id; Set&lt;Role&gt; roles; }
  • 这不是一个实际的模型。这是我想编写 HQL 查询的场景示例。这是我想到的第一件事,所以我以此为例子。数据类型正确...

标签: java hibernate jdbc hql


【解决方案1】:

我找到了解决方案:

"from User as user where 'ADMIN' in elements(user.roles)";

hql 函数 value() 必须以某种方式对此有所帮助,您也可以尝试使用它,但上面的 hql 查询对我有用。

【讨论】:

  • 这应该是选择的答案,因为其他人从 Set 更改了模型,甚至没有确认它。
  • 谢谢很多,我已经搜索了很多答案。这是唯一正确的一个
  • 很好的答案,老而金
【解决方案2】:

您可以使用下面的查询

"from User as user where user.id in (select user.id from Role as role left join role.user as user where role.name = 'ADMIN')"

【讨论】:

    【解决方案3】:

    应该这样做:

    session.createQuery("from User where roles in ('ADMIN')");
    

    【讨论】:

      猜你喜欢
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 2014-01-12
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      相关资源
      最近更新 更多