¿Cómo hacer asignaciones de colecciones basadas en consultas personalizadas en Hibernate?

StackOverflow https://stackoverflow.com/questions/432347

Pregunta

Tengo un objeto que está mapeado para tener un conjunto de objetos, muy simple. Sin embargo, lo que realmente quiero hacer es poner algunos criterios en ese mapeo. Aquí está el mapeo actual:

    <set name="ops" inverse="true" cascade="all, delete-orphan">
        <key column="cityblock_id" on-delete="cascade"/>
        <one-to-many class="com.tamedtornado.data.Operation"/>
    </set>

Ahora, en lugar de obtener todas las operaciones asociadas, quiero obtener operaciones que no se hayan completado, o que tengan, o lo que sea. Los documentos de Hibernate son muy silenciosos en esto, aunque algunas publicaciones antiguas del foro me han mostrado un poco. Aparentemente puede usar una etiqueta sql-query, pero eso tampoco es lo que quiero hacer.

¿Hay alguna forma de hacer esto con una consulta HQL? Solo quiero limitar los resultados con una consulta simple y tener algunos mapas de colección, como active_ops y complete_ops, etc.

Saludos, Jason

¿Fue útil?

Solución

En 6.2. Asignaciones de colección en los documentos de Hibernate encontrará que puede usar una cláusula WHERE en cualquier asignación de colección:

donde (opcional) especifique una condición arbitraria SQL WHERE que se utilizará al recuperar o eliminar la colección (útil si la colección debe contener solo un subconjunto de los datos disponibles)

Dijiste que quieres usar una consulta HQL pero no creo que sea posible. Pero como solo tiene que especificar una cláusula WHERE simple en su mapeo, en realidad no hay mucha diferencia, entre HQL y "real". SQL

Otros consejos

No estoy seguro si entiendo su pregunta claramente, pero parece que necesita usar una cláusula where en su consulta SQL

Debería poder usar una cláusula where en su HQL o usar la API de criterios en hibernación para lograr los resultados deseados:

Suponiendo que tiene un campo llamado estado para " activo " o "completado" su HQL debería verse así:

from ops where status="active"

o si usa el API de criterios:

List activeOperations = sess.createCriteria(Operation.class)
    .add( Restrictions.equals("status", "active") )
    .list();

Los capítulos 14 y 15 del tutorial de hibernación hablan un poco sobre esto: http://www.hibernate.org/hib_docs/v3/ reference / es / html / index.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top