Как сделать внутреннее соединение между двумя таблицами с помощью JPA

Как написать запрос JPA, который выполняет соединение между двумя объектами, которые не имеют никакой ссылки между ними, я имею в виду, что в сопоставлении не было определено отношение

EntityA
@Id
long id

String field1
String field2

EntityB
@Id
String field1
@Id
String field2

Как я могу написать такое соединение в JPQL

select entityB from entityA,entityB
where entityB.field1 = entityA.field1
and entityB.field2 = entityA.field2

Спасибо


person Richard Grossman    schedule 20.03.2012    source источник


Ответы (2)


Вы думаете на SQL, а не на ORM. В ORM вы создаете отношения между сущностями (@OneToMany, @ManyToOne, @ManyToMany и т. д.), и ORM использует эти отношения, чтобы определить, как следует их соединять.

Вам нужно обновить свои объекты, чтобы иметь эти отношения, а затем пройти объектную модель, чтобы сделать то, что вы хотите сделать.

Здесь можно начать: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-mapping-association

person atrain    schedule 20.03.2012
comment
ОК, понял, но я не хочу создавать ограничение базы данных, и создание этого отношения создаст такие ограничения, как я могу определить такое отношение без создания ограничений базы данных? - person Richard Grossman; 20.03.2012
comment
Вы можете запустить Hibernate без создания ограничений — просто не настраивайте hibernate.hbm2ddl.auto - person atrain; 20.03.2012

Если между этими сущностями нет явных отношений, в JPQL невозможно выполнить какое-либо явное соединение.

Вы всегда можете записать запрос как декартово произведение. В зависимости от используемой СУБД она может оптимизировать запрос, чтобы он был почти таким же эффективным, как соединение. Однако примите во внимание, что физическая модель должна быть оптимизирована для этого. Это означает индексы и, если возможно, внешние ключи. Без них этот запрос будет крайне неэффективным по сравнению с соединением.

person Xavi López    schedule 20.03.2012