我有两个Hibernate数据对象。第一个是用户(具有唯一的ID,用户名等),第二个是Collaborateable类。在这两者之间存在n对m的关系(带有Set的实现)。这意味着,一个用户使用许多可协作对象,而一个可协作对象具有许多用户。另外,一个可协作对象只有一个用户作为所有者。
<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集中包含相同特定用户的Collaborateable。此外,还应该有一个简单的WHERE子句来检查关键字。
Hibernate中是否有类似CONTAINS运算符的东西?
例如:
FROM CollaborateableImpl WHERE (owner = :user OR users CONTAINS :user) AND keywords like '%:searchString%'
否则,您知道如何通过联接解决此问题吗?
您正在寻找elements关键字。
select c FROM CollaborateableImpl c WHERE ( c.owner = :user OR :user in elements(c.users) ) AND c.keywords like '%:searchString%'