Ответ может сильно отличаться в зависимости от того, что вы ищете.
Исходя из вашего текущего отображения, предполагая, что у вас есть экземпляр Primary
, вы можете получить соответствующий ему Secondary
, запросив,Например, по HQL:
from Secondary s where s.primary = :primary
и передайте ваш первичный как параметр.
Если вы ищете способ навигации из экземпляра объекта Primary
, вы могли бы создать би-направленное отображение:
class Primary {
@OneToMany(mappedBy="primary", ...)
private Set<Secondary> secondaries;
}
class Secondary {
@ManyToOne
private Primary primary;
}
Вы можете обратиться к моему (очень старому) ответу на связанный вопрос о том, как его определить.https://stackoverflow.com/a/13812047/395202
Однако просто наличие двунаправленных отношений НЕ избегает «выбора дважды», , если «выбор дважды» означает выполнение 2 запросов SQL в БД .
Чтобы уменьшить такие двусторонние, есть несколько способов решить.Первый - объявить отношения как EAGER fetch.Однако этот способ я обычно не рекомендую, поэтому я не буду углубляться.
Другой (imho, более подходящий) способ - это выборка соединения, когда вы выбираете Primary
.Чтобы получить экземпляр Primary
со связанными экземплярами Secondary
, используйте HQL, например:
from Primary p left join fetch p.secondaries where ....