I tienen un simple asociación OneToMany entre 2 objeto de Padres & Niño como se muestra a continuación.Id no ser ajustado al llamar EntityManager.merge()
Entidad Dominante
@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>();
....
}
entidad secundaria
@Entity
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@Version
private Long version;
...
}
que sigue es mi prueba de que carga una matriz existente agrega un niño y llama EntityManager.merge() en la matriz.
@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());
}
La afirmación donde se prueba la clave principal de la identificación falla. Veo que el registro se está insertando correctamente en la base de datos junto con la clave principal auto asignada.
Todas mis llamadas DAO se envuelven alrededor de transacción con la propagación según sea necesario.
Se debe dar más información, es una aplicación de esta primavera o EJB? .. ¿Podría –
publicar el código de dao.mergeEntity (parent)? – Sylar
Las transacciones son manejadas por Spring siguiente es mi código DAO @Transactional (propagation = Propagation.REQUIRED) \t público mergeEntity (Object entity) { \t \t return em.merge (entidad); \t} – Rakesh