hibernate - osos - Consulta de hibernación: ¿un conjunto contiene un determinado objeto?
invernar (1)
Estás buscando la palabra clave de los elements .
select c
FROM CollaborateableImpl c
WHERE (
c.owner = :user
OR :user in elements(c.users)
)
AND c.keywords like ''%:searchString%''
Tengo dos objetos de datos de hibernación. El primero es un Usuario (con ID único, nombre de usuario, etc.) y el segundo es la clase Colaborable. Entre estos dos hay una relación n-to-m (implementet con Sets). Eso significa que, un usuario trabaja en muchos Collaborateables y un Collaborateable tiene muchos usuarios. Además, un Colaborable tiene exactamente un Usuario como propietario.
<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>
Me gustaría implementar una consulta de Hibernate, que busque Collaborateables que tengan un determinado usuario como propietario O que contenga al mismo Usuario en el Conjunto Collaborateable.users Además, también debe haber una cláusula WHERE simple para verificar las palabras clave.
¿Hay algo como un operador CONTAINS en Hibernate?
Por ejemplo:
FROM CollaborateableImpl WHERE (owner = :user OR users CONTAINS :user) AND keywords like ''%:searchString%''
De lo contrario, ¿sabe cómo resolver este problema con una unión?