Я знаю, что есть десятки вопросов на ту же тему, но я не могу понять, почему они не работают в моем случае.
У меня есть две таблицы, одна с именем Account и одна с CustomerRelations, и между ними существует соотношение один ко многим (к одной учетной записи может принадлежать несколько customerRelations ... учетная запись может существовать без других отношений с клиентами но связь с клиентом может быть привязана только к существующей учетной записи)
Вот как они аннотируются в моих классах сущностей:
Таблица счетов:
@OneToMany(mappedBy = "account", cascade = CascadeType.ALL, orphanRemoval = true)
@OnDelete(action = OnDeleteAction.CASCADE)
private List<CustomRel> customRels = new ArrayList<>();
Таблица CustomerRelation:
@ManyToOne(fetch = FetchType.EAGER)
private Account account;
У меня есть бизнес-логика, в которой я хочу вызвать запрос, основанный на конкретной дате, сохраненной на вкладке Учетная запись:
@NamedQuery(name = Account.FIND_BY_ACC_NBR, query = "select acc from Account acc where acc.accountNumber =:accountNumber")
Этот запрос дает правильные данные из таблицы счетов, но для поля customerRels я получаю следующее исключение:
**Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception.**
То же самое происходит, когда метод get вызывается для моего объекта Account:
В моем примере есть объект account с пустым списком customerRels. Таким образом, в базе данных нет записи customerRels, которая связана с accountId.
Насколько я знаю, что fetchType в моем классе сущностей Account в lazy - по умолчанию, верно?.
В моих сценариях SQL, которые создают таблицы, в таблицу CustomerRelations добавлен только account_id, в таблице Account нет ссылки на дочерний объект.
Я знаю, что это очень банальная проблема, но мне нужна помощь. Должен ли я изменить свой запрос JPQL?