2016-08-31 2 views
2

J'ai un deux modèle, club et emplacement. Un club ne peut avoir qu'un seul emplacement, et un emplacement peut avoir plusieurs clubs. Dans mes classes POJO, je définis ces deux comme ci-dessous:Plusieurs-à-une recherche dans Hibernate avec des critères

// Club.java 
public class Club { 
    private Location location; 
    // some other attributes and getters/setters 
} 

// Location.java 
public class Location { 
    private int id; // primary key 
    // some attribues and getters/setters 
} 

Et mes applications de mise en veille prolongée sont:

// some other mappings, foreign key is "location" column in my actual table, as // can be seen below 
<many-to-one name="location" column="location" class="path/to/Club.java"> 

J'ai besoin de chercher des clubs par leur emplacement. Et je fais usage de critères comme ci-dessous,

Criteria crit = session.createCriteria(Club.class); 
crit.createAlias("location.id", "location"); 
crit.add(Restrictions.eq("location", locationId); 

Cependant, je reçois l'erreur hibernate.QueryException: non une association: id

Chaque fois que j'essayez de remplacer "location.id" avec « emplacement ", puis j'obtiens un IllegalArgumentException est survenue lors de l'appel getter Location.id erreur. Jusqu'à présent, je ne pouvais pas atteindre mon objectif dans les deux sens. Été le feu sur le web pendant des jours, mais aucun d'entre eux était utile. Quel est le problème ici?

+0

avez-vous essayé 'private Integer id'? ne devrait pas utiliser de primitives avec hibernation ... – joc

+0

@joc fera, indépendamment du problème, merci! –

Répondre

3

Criteria.createAlias ​​est pour l'association pas pour les propriétés d'entité. Voir les documents Java.

Pour votre exigence, il devrait être comme

Criteria crit = session.createCriteria(Club.class); 
crit.createAlias("location", "location"); 
crit.add(Restrictions.eq("location.id", locationId); 

Je ne l'ai pas testé le code. Voyons comment ça se passe.

+0

Oui, ça a marché. Je vous remercie! –