JoinTable (Parent / Child) к себе всегда присоединяется к таблице присоединения при загрузке - PullRequest
0 голосов
/ 13 декабря 2010

У меня есть сущность, у которой может быть 0 или много дочерних элементов от одной сущности.Кроме того, у сущности может быть 0 или один родительский объект одной и той же сущности.

Структура таблиц

Account (
  AccountId PK,
  Name char
  etc...
)

AccountRef (
  ChildId PK, FK references Account(AccountId)
  ParentId PK, FK references Account(AccountId)
)

Все работает правильно, за исключением случаев, когда я загружаю учетную запись,соединение всегда выполняется в таблице соединений (я предполагаю посмотреть, есть ли запись AccountRef).Запрос не присоединяется к объекту Account, поэтому, когда я выполняю account.getMasterAccount (), выполняется соединение с AccountRef, а затем возвращается к Account, чтобы получить мастер.Опять же, это все правильно, но не оптимально, так как соединение выполняется дважды, когда это необходимо, и один раз, когда это не нужно.

Это единственный способ обойти это, используя инструментарий для LazyToOne, или есть лучший способ отобразитьэтот?Это устаревшая структура таблиц, и я не могу ее изменить.

@Entity
Account {

 @OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="masterAccount")
     private Set<Account> subAccount;

 @ManyToOne(fetch=FetchType.LAZY)
 @JoinTable(name="AccountRef",
        joinColumns = @JoinColumn(name="childId", referencedColumnName="accountId"),
        inverseJoinColumns = @JoinColumn(name="parentId", referencedColumnName="accountId")
    ) 
     private Account masterAccount;

1 Ответ

0 голосов
/ 13 декабря 2010

Зачем вам стол соединения? Многим это не нужно. Вы должны быть в состоянии удалить аннотацию JoinTable вообще? или есть причина, по которой вам это нужно?

...