Est-ce que l'API de critères d'Hibernate toujours pas en charge les relations imbriquées

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

Question

Je voudrais utiliser l'API de critères d'Hibernate précisément ce que tout le monde dit est probablement son cas d'utilisation le plus probable, selon des critères de recherche complexes. Le problème est, la table que je veux interroger contre ne se compose pas uniquement de valeurs primitives, mais en partie d'autres objets, et je dois interroger contre les ids de ces objets.

J'ai trouvé cet article il y a de 2 ans qui suggère qu'il est impossible. Voici comment je l'ai essayé en vain, il y a d'autres aspects de la mise en veille prolongée où je sais où ce genre de notation par points est pris en charge dans les littéraux de chaîne pour indiquer l'imbrication d'objets.

   if (!lookupBean.getCompanyInput().equals("")) {
       criteria.add(Restrictions.like("company.company", lookupBean.getCompanyInput() + "%"));
   }

EDIT:

Voici mon code factorisation correctement pour accomplir ce que je tentais ci-dessus, en utilisant la suggestion de la première réponse ci-dessous; Notez que je suis même à l'aide d'un appel createCriteria supplémentaire à l'ordre sur un attribut dans un autre objet associé / tableau:

if (!lookupBean.getCompanyValue().equals("")) {
    criteria.createCriteria("company").add(
           Restrictions.like("company", lookupBean.getCompanyValue() + "%"));
}

List<TrailerDetail> tdList = 
        criteria.createCriteria("location").addOrder(Order.asc("location")).list();
Était-ce utile?

La solution

Pas tout à fait sûr que je suis votre exemple, mais il est certainement possible de spécifier les conditions de filtre sur une entité associée, simplement par emboîtement Critères objets pour former un arbre. Par exemple, si j'ai une entité appelée Commander avec plusieurs à une relation avec un utilisateur entité, je peux trouver toutes les commandes pour un utilisateur nommé Fred avec une requête comme ceci:

List<Order> orders = session.createCriteria(Order.class)
    .createCriteria("user")
        .add(eq("name", "fred"))
    .list();

Si vous parlez d'une entité qui a une relation avec lui-même, qui devrait fonctionner aussi bien. Vous pouvez également remplacer « nom » par « id » si vous avez besoin de filtrer sur l'ID d'un objet associé.

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