Доступ к членам связанной сущности @OneToOne в прослушивателе событий POST_LOAD
У меня есть две сущности, которые похожи на это:
EntityA:
@Entity
@Getter
@Setter
@Table(name = "TABLE_A")
public class EntityA implements SomeInterface {
@Id
@Column(name = "A_ID")
private Long id;
@OneToOne(mappedBy = "entityA")
private EntityB entityB;
@ManyToOne
@JoinColumn(name = "A_C_ID")
private EntityC entityC;
...
some other fields
@Override
public EntityC retrieveEntityC() {
return getEntityC();
}
}
EntityB:
@Entity
@Getter
@Setter
@Table(name = "TABLE_B")
public class EntityB implements SomeInterface {
@Id
@Column(name = "B_ID")
private Long id;
@OneToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "B_A_ID", unique = true, nullable = false)
private EntityA entityA;
...
some other fields
@Override
public EntityC retrieveEntityC() {
return getEntityA().retrieveEntityC();
}
}
Я реализовал прослушиватель событий Hibernate типа POST_LOAD. Когда Hibernate пытается загрузить EntityA, он сначала запускает загрузку своего дочернего объекта - entityB. Когда entityB загружен, вызывается событие POST_LOAD и вызывается мой прослушиватель событий (в контексте EntityB). В моем слушателе я вызываю метод retrieveEntityC() от entityB, который вызывает метод retrieveEntityC() от entityA, чтобы наконец получить entityC от entityA. Проблема в том, что я получаю NULL вместо точного объекта entityC. Объект entityA - это просто прокси-сервер, в котором заполнено только поле id, а для других полей установлено значение NULL. Вызов метода получения не приводит к извлечению объекта из базы данных, как я подозреваю.
В этом сценарии, есть ли способ заставить Hibernate действительно получить entityC из базы данных?