Можно ли указать ключи разделов на основе даты при присоединении к связанным объектам? - PullRequest
0 голосов
/ 10 июня 2011

У меня есть две связанные сущности, отображаемые аннотациями JPA, подкрепленные hibernate.Оба объекта имеют идентифицированные столбцы в оракуле.У нас также есть ежемесячные разделы, представленные столбцом с именем ENTRY_DATE.

T_MASTER     T_JOINED
---------    ----------- 
MASTER_ID    JOINED_ID 
ENTRY_DATE   ENTRY_DATE
             MASTER_ID(FK)
...          ....

Чтобы воспользоваться преимуществом ключа раздела, я бы хотел, чтобы Hibernate присоединился как к идентификаторам идентификации, так и к ключу раздела, но когда я использую следующую аннотацию в классе Joined:

@ManyToOne
@JoinColumns(value={
   @JoinColumn(name="MASTER_ID"),
   @JoinColumn(name="ENTRY_DATE")})
private Master master;

Я получаю ошибки из-за слишком большого количества столбцов соединения.Я вынужден использовать

 @JoinColumn(name="MASTER_ID")
 private Master master;

Я немного Noob JPA / Hibernate. Можно ли использовать ключ раздела в дополнение к первичному ключу при присоединении к связанным объектам ?

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Возможно, вам нужно объявить оба столбца как части составного первичного ключа в Master.Hibernate не заботился бы о том, что такое настоящий PK в базе данных.Отображение будет немного более сложным с @Embeddable, но оно должно решить проблему.

0 голосов
/ 10 июня 2011

да.

При использовании нативного sql это выглядит следующим образом:

Query query = session.createSQLQuery( "SELECT {T_master.*}, {T_joined.*} FROM schema.t_master AS T_master OUTER LEFT JOIN schema.T_joined AS T_joined ON T_master.ENTRY_DATE = T_joined.ENTRY_DATE AND T_master.MASTER_ID = T_joined.JOINED ID " /*WHERE ... */ );
query.setEntity( "T_master", T_master.class);
query.setJoin( "T_joined", "T_master.joinedSet"); //joinedSet is the one-to-many mapping
query.setJoin( "T_master", "T_joined.master" );

Таким образом, вы получаете очень подробный запрос, а hibernate действует только как средство отображения объектов.1006 *

Используя Criteria или HQL, невозможно использовать OUTER LEFT JOIN ON для какого-либо поля, кроме первичных ключей.Вот почему, если у вас есть такая опция, используйте собственный код SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...