У меня есть простая связь OneToMany между двумя объектами, родительский и дочерний, как показано ниже.
Родительский объект
@Entity
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@Version
private Long version;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
List<Child> children = new ArrayList<Child>();
....
}
Дочерний объект
@Entity
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@Version
private Long version;
...
}
Ниже приведен мой тест, который загружает существующий родительский элемент, добавляет дочерний элемент и вызывает EntityManager.merge () для родительского элемента.
@Test
public void testParent(){
Parent parent = (Parent) dao.loadParent(Parent.class, parentId);
Child c = new Child();
c.setName("c");
parent.getChildren().add(c);
dao.mergeEntity(parent);
Assert.assertNotNull(c.getId());
}
Утверждение, в котором проверяется первичный ключ идентификатора, не выполняется. Я вижу, что запись правильно вставлена в базу данных вместе с автоматически назначаемым первичным ключом.
Все мои вызовы DAO обертываются вокруг транзакции с распространением в соответствии с требованиями.