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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top