Comment faire des mappages de collection basés sur des requêtes personnalisées dans Hibernate?

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

Question

J'ai un objet qui est mappé pour avoir un ensemble d'objets, très simple. Cependant, ce que je veux vraiment faire, c'est mettre quelques critères sur cette cartographie. Voici la cartographie actuelle:

    <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>

Maintenant, au lieu de simplement obtenir tous les ops associés, je veux juste obtenir des ops qui ne sont pas terminés, ou qui ont, ou peu importe. La documentation d'Hibernate est très silencieuse à ce sujet, bien que certains anciens messages du forum me l'aient montré un peu. Vous pouvez apparemment utiliser une balise sql-query, mais ce n’est pas non plus ce que je veux faire.

Est-il possible de faire cela avec une requête HQL? Je veux juste limiter les résultats avec une requête simple et avoir quelques cartes de collection, comme active_ops et completed_ops, etc.

Salut, Jason

Était-ce utile?

La solution

Sous 6.2. Les mappages de collection dans la documentation d'Hibernate vous permettront d'utiliser une clause WHERE sur tout mappage de collection:

où (facultatif) spécifiez une condition SQL WHERE arbitraire à utiliser lors de l'extraction ou de la suppression de la collection (utile si la collection doit contenir uniquement un sous-ensemble des données disponibles)

Vous avez dit que vous souhaitiez utiliser une requête HQL mais je ne pense pas que ce soit possible. Mais comme il vous suffit de spécifier une simple clause WHERE dans votre mappage, il n'y a pas vraiment grande différence entre HQL et "real". SQL.

Autres conseils

Je ne suis pas sûr de bien comprendre votre question, mais il semble que vous deviez utiliser une clause where dans votre requête SQL

Vous devriez pouvoir utiliser une clause where dans votre HQL ou utiliser les critères api in hibernate pour obtenir les résultats souhaités:

Supposons que vous ayez un champ appelé statut pour "actif". ou "complété" votre HQL devrait ressembler à ceci:

from ops where status="active"

ou si vous utilisez les critères api:

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

Les chapitres 14 et 15 du tutoriel d'hibernation parlent un peu de cela: http://www.hibernate.org/hib_docs/v3/ reference / fr / html / index.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top