【问题标题】:Hibernate query: does a Set contains a certain Object?Hibernate 查询:Set 是否包含某个 Object?
【发布时间】:2012-02-25 08:02:01
【问题描述】:

我有两个 Hibernate 数据对象。第一个是用户(具有唯一的 id、用户名等),第二个是 Collaborateable 类。在这两者之间有一个 n 到 m 的关系(用 Sets 实现)。这意味着,一个用户在许多 Collaborateable 上工作,而一个 Collaborateable 有很多用户。此外,Collaborateable 只有一个用户作为所有者。

<class name="CollaborateableImpl" table="Collaborateable">
<id name="id" type="int" column="id">
    <generator class="increment" />
</id>

<property name="name" column="name" type="string" not-null="true" />
<property name="keywords" column="keywords" type="string"/>

<!-- Collaborateable has a Registered User as owner -->
<many-to-one name="owner" class="UserImpl" fetch="select">
        <column name="User_id_owner" not-null="true" />
</many-to-one>

<!-- Users that collaborate on this Collaborateable -->
<set name="users" table="CollaborateOn" inverse="false">        
        <key column="Collaborateable_id" />         
        <many-to-many column="User_id" class="UserImpl" />    
</set>

我想实现一个 Hibernate 查询,它搜索以某个用户为所有者或在 Collaborateable.users 集中包含相同某个用户的 Collaborateables。此外,还应该有一个简单的 WHERE 子句来检查关键字。

Hibernate 中有类似 CONTAINS 运算符的东西吗?

例如:

FROM CollaborateableImpl WHERE (owner = :user OR users CONTAINS :user) AND keywords like '%:searchString%'

否则,你知道如何通过连接来解决这个问题吗?

【问题讨论】:

    标签: hibernate set hql contains


    【解决方案1】:

    您正在寻找 elements 关键字。

    select c 
    FROM CollaborateableImpl c 
    WHERE (
        c.owner = :user 
        OR :user in elements(c.users)
    )
    AND c.keywords like '%:searchString%'
    

    【讨论】:

    • 如果我使用标准,限制的类型是什么?
    猜你喜欢
    • 2015-03-03
    • 2014-05-26
    • 2018-02-17
    • 2016-01-20
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多