У меня есть сущность, у которой может быть 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;