У меня есть два объекта данных Hibernate. Первый - это Пользователь (с уникальным идентификатором, именем пользователя и т. Д.), А второй - это класс Collaborateable. Между этими двумя существует отношение n-to-m (реализовано с помощью Sets). Это означает, что пользователь работает со многими объектами для совместной работы, а объект для совместной работы имеет множество пользователей. Кроме того, у 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, который ищет Collaborateables, владельцем которого является определенный пользователь, ИЛИ содержащий того же определенного пользователя в наборе Collaborateable.users. Кроме того, также должно быть простое предложение WHERE для проверки ключевых слов.
Есть ли что-то вроде оператора CONTAINS в Hibernate?
Например:
FROM CollaborateableImpl WHERE (owner = :user OR users CONTAINS :user) AND keywords like '%:searchString%'
В противном случае, знаете ли вы, как решить эту проблему с помощью соединения?