Как вытащить сущность, которая FetchType.LAZY?

241
15 апреля 2022, 13:50

Имею сущность User и сущность Thing.

Сущность Thing ссылается на User с отношением ManyToOne:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
@NotNull
private User user;

Мне надо вытащить Thing вместе с User, к которому он относится, причём User должен вытаскиваться как реальный объект, а не обёртка. Как это сделать?

Answer 1

Для того, чтобы вытащить сущность, которая отмечена FetchType.Lazy, необходимо использовать метод Hibernate.unproxy(), который возвращает реальную сущность, без обёртки. Разумеется, этот метод необходимо вызывать в транзакции.

Конкретно для моего примера это выглядело бы так:

@Transactional
public void getWithUser(int id) {
    Thing thing = repository.findById(id);
    thing.setUser(Hibernate.unproxy(thing.getUser()));
    return thing;
}
READ ALSO
WebView не открывает url с meta refresh

WebView не открывает url с meta refresh

WebView не может выгрузить ссылку с meta refreshОткрывает окно "Не удалось найти страницу"

226
Как обеспечить изоляцию в Unit тестах

Как обеспечить изоляцию в Unit тестах

Пытаюсь написать Unit тест "по всем правилам"

156
Как в spring обработать body в виде json?

Как в spring обработать body в виде json?

Пытаюсь изучить api в springGET Запрос хорошо посылается, а вот POST пока сложно

201
Вывод двумерного массива. Java

Вывод двумерного массива. Java

Создал новый метод, прописал там следующее:

99