2016-08-31 4 views
2

У меня есть две модели: Club и Location. У клуба может быть только одно место, а в месте может быть много клубов. В моих классах Pojo я определяю эти два, как показано ниже:Многопользовательский поиск в спящем режиме с критериями

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

И мои Hibernate отображения являются:

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

мне нужно искать клубы по их местоположению. И я использую в качестве критериев ниже,

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

Однако я получаю ошибку hibernate.QueryException: не ассоциации: идентификатор

Всякий раз, когда я пытаюсь заменить «location.id» с «места », то я получаю Ошибка IllegalArgumentException при вызове getter Location.id. До сих пор я не мог достичь своей цели в обоих направлениях. Просматривал его в Интернете в течение нескольких дней, но ни один из них не был полезен. В чем проблема?

+0

Вы пробовали 'private Integer id'? не следует использовать примитивы с hibernate ... – joc

+0

@joc будет делать, независимо от проблемы, спасибо! –

ответ

3

Criteria.createAlias ​​предназначен для ассоциации не для свойств сущностей. См. Java-документы.

Для вашего требования оно должно быть как

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

Я не проверял код. Давайте узнаем, как это происходит.

+0

Да, это сработало. Спасибо! –

Смежные вопросы