Я довольно новичок в Hibernate, я установил двунаправленные отношения @OneToMany между родительскими и дочерними объектами и ожидаю, когда я сохраню все в БД, установив родительский объект в дочерний объект (потому что дочерний объект является владельцемотношения), и когда я получаю родительский объект с помощью ORM, я ожидаю также получить дочерний объект, но взамен я вижу ноль дочерних объектов.
Насколько я понял из того, что я уже прочитал в Интернете, когда я сохраняю дочерний объект как владельца отношений с родительским целым, ORM должен совершать магию соединения двух объектов в соответствии спредопределенное отображение отношений.Является ли эта информация правильной?
@Entity
@Table(name = "stream")
@SequenceGenerator(name = "sequence", sequenceName = "stream_id", allocationSize = 1)
public class StreamEntity extends EntityWithId {
// @MappedSuperclass with ID
@Column(name = "request_id")
@OneToMany(
mappedBy = "streamEntity",
fetch = FetchType.LAZY
)
private List<RequestEntity> requestEntities = new ArrayList<>();
// getters setters
}
@Entity
@Table(name = "request")
@SequenceGenerator(name = "sequence", sequenceName = "request_id", allocationSize = 1, initialValue = 1)
public class RequestEntity extends EntityWithId {
// @MappedSuperclass with ID
@JoinColumn(name = "stream_id")
@ManyToOne(fetch = FetchType.LAZY)
private StreamEntity streamEntity;
// getters setters
}
Некоторые тесты:
@Test
public void createStreamWithSeveralStreamTargetsAndDeleteStream() {
List<StreamEntity> streamEntities = createStream(1); // stream object is persisted here
List<RequestEntity> requestEntitySave = createRequest(1, streamEntityCheck);
assertEquals(1, requestEntitySave.size()); // request entity is persisted with the stream object into the database
List<StreamEntity> streamEntities = streamDao.findAll();
assertEquals(1, streamEntities.size());
StreamEntity streamEntity2 = streamEntities.get(0);
streamEntity2.getRequestEntities(); - this collection shows 0
}
Что мне не хватает?
Обновление: как предложил @Alan Hay, я добавил @Постоянный контекст в моем тесте теперь выглядит следующим образом:
@PersistenceContext
private EntityManager em;
@Test
public void createStreamWithSeveralStreamTargetsAndDeleteStream() {
List<StreamEntity> streamEntities = createStream(1); // stream object is persisted here
List<RequestEntity> requestEntitySave = createRequest(1, streamEntityCheck);
assertEquals(1, requestEntitySave.size()); // request entity is persisted with the stream object into the database
em.clear();
List<RequestEntity> requestEntities = requestDao.findAll();
assertEquals(1, requestEntities.size()); // retirns zero objects
List<StreamEntity> streamEntities = streamDao.findAll();
assertEquals(1, streamEntities.size());
StreamEntity streamEntity2 = streamEntities.get(0);
streamEntity2.getRequestEntities();// this collection shows 0
}
После того, как я это сделал, я получаю ноль объектов в requestDao.findAll ();шаг.Я передал эти изменения на предыдущем шаге, почему я не могу получить эту сущность?