@OneToOne y @JoinColumn, auto entidad nula de eliminación, factible?
-
27-09-2019 - |
Pregunta
Tengo dos entidades, con las siguientes anotaciones JPA:
@Entity
@Table(name = "Owner")
public class Owner implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private long id;
@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
@JoinColumn(name="Data_id")
private Data Data;
}
@Entity
@Table(name = "Data")
public class Data implements Serializable
{
@Id
private long id;
}
El propietario y tiene datos de mapeo uno a uno, el lado propietario es propietario. El problema se produce cuando ejecuto: owner.setData (null); ownerDao.update (propietario) ; DATA_ID el "dueño" de la mesa se convierte en nulo, que es correcta.
Pero la fila "Datos" no se elimina automáticamente. Tengo que escribir otra DataDao, y otra capa de servicio para envolver los dos acciones (ownerDao.update (propietario); dataDao.delete (datos);)
¿Es posible hacer una fila de datos borrados automáticamente cuando el propietario ser dueño establecen a NULL?
Solución
Dependiendo de la versión de hibernación, utilice:
utilizar el cascadeType: DELETE_ORPHAN o orphanRemoval = true en la @OneToOne anotación
documentación: http: // docs.jboss.org/hibernate/core/3.3/reference/en/html/objectstate.html#objectstate-transitive
Nunca he probado en OneToOne, pero desde el doc, debería funcionar.
@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
@JoinColumn(name="Data_id")
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Data Data;
o
@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="Data_id")
private Data Data;
EDIT: i encontré este post SO: Soluciones para la falta de Hibernate de apoyo delete-orphan para las relaciones uno-a-uno y muchos-a-uno?
Así perhap es que no está funcionando. Las dos respuestas describen dos soluciones diferentes, sin embargo.