2016-07-08 4 views
0

Рассмотрите следующую настройку.Hibernate поисковый запрос, ограничение по дочерним классам?

Space.java

class Space { 

    Id id; 

    ParkingCampus campus; 
} 

class ParkingCampus { 

    Id id; 

    String country; 

} 

Это не точная структура моего проекта, но достаточно близко для того, что я пытаюсь понять.

Как я могу выполнить запрос в моем объекте «Пробел», который возвращает только экземпляры, где дочерний класс «ParkingCampus» имеет строку «Страна», установленную на определенное значение, например: «Великобритания».

Я думал, что-то вроде:

sessionFactory.getCurrentSession() 
    .createCriteria(String.class) 
    .add(Restrictions.eq("country", "UK")) 
    .list(); 

Но я не уверен, что если бы собрать правильно. Таким образом, Hibernate по умолчанию выполняет «глубокий» поиск в попытке сопоставить результаты с моими критериями ограничения или мне нужно сделать что-то еще, чтобы указать, что запрос работает таким образом?

Любая помощь была бы принята с благодарностью!

ответ

1

Используйте Space в качестве базового критерия, создайте псевдоним для кампуса парковки и добавьте ограничение на дочернюю страну псевдонима в Великобританию.

Однако имейте в виду, что ваша реализация кажется немного выключенной, ИМО. Должна быть таблица с составным ключом parkingCampusId и spaceId, а не пространство, владеющее идентификатором.

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Space.class, "space"); 
criteria.createAlias("space.parkingCampus", "campus"); 
criteria.add(Restrictions.eq("campus.country", "UK"); 
+0

привет, спасибо за ваш ответ. Учитывая сущности в таблице, я согласен с вами в том, что пространство должно иметь поле идентификатора кампуса. Однако, и исправьте меня, если я ошибаюсь, является ли пункт Hibernate не тем, что он должен помочь отобразить эти отношения для меня? Так сказать, что после получения пространства я должен также определить соответствующий кампус. Вместо того, чтобы выполнять поиск по первому пространству, а затем идентификатор кампуса, чтобы получить результат, который я хочу? – Adam

+0

Первоначально, да, но вы хотите использовать сопоставление «много-к-одному»: http://www.tutorialspoint.com/hibernate/hibernate_many_to_one_mapping.htm в основном, то, что у вас есть, подходит как «грубый эскиз», но вы хотите для реализации отношений, чтобы, например, Кампус приносил с собой ленивую коллекцию пространств, с которой вы можете работать. – Compass

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