Estoy usando hibernar como una capa de persistencia. Hay 2 entidades que viven en la misma tabla que extienden una superclase con una estrategia de herencia de tabla única.Cambiar el tipo de una entidad que conserva su ID
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class A {
@Id
@GeneratedValue
protected Long id;
// some common fields for B and C
}
@Entity
public class B extends A {
// B-specific fields
}
@Entity
public class C extends A {
// C-specific fields
}
Tengo una instancia de B con id = 4. ¿Cómo cambio el tipo de esta instancia a C preservando su ID (4)?
B b = em.find(B.class, 4L);
C c = convertToC(b);
c.setId(b.getId());
em.remove(b);
em.persist(c);
El código anterior falla con
org.hibernate.PersistentObjectException: detached entity passed to persist: C
¿Es posible en absoluto?
¿Cómo falla? – skaffman
He agregado la excepción a la pregunta – artemb
Solo una corazonada, pero ¿ha intentado llamar a merge() en lugar de persist()? – skaffman