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

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

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

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

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


Ответы (1 шт):

Автор решения: Zhenyria

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

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

@Transactional
public void getWithUser(int id) {
    Thing thing = repository.findById(id);
    thing.setUser(Hibernate.unproxy(thing.getUser()));
    return thing;
}
→ Ссылка