@OneToOne et @JoinColumn, suppression automatique entité null, faisables?
-
27-09-2019 - |
Question
J'ai deux entités, avec les annotations JPA suivantes:
@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;
}
propriétaire et de données sur un à-un, le côté propriétaire est propriétaire. Le problème se produit lorsque j'Execute: owner.setData (null); ownerDao.update (propriétaire) ; Le data_id de la table « propriétaire » devient nulle, c'est exact.
Mais la ligne « Data » est pas automatiquement supprimé. Je dois écrire un autre DataDao, et une autre couche de service pour envelopper les deux actions (ownerDao.update (propriétaire); dataDao.delete (données);)
Est-il possible de faire une ligne de données supprimées automatiquement lorsque le propriétaire il mis en possession null?
La solution
En fonction de votre version de mise en veille prolongée, utilisez:
utilisez la CascadeTypes: DELETE_ORPHAN ou orphanRemoval = true sur l'annotation @OneToOne
Documentation: http: // docs.jboss.org/hibernate/core/3.3/reference/en/html/objectstate.html#objectstate-transitive
Je ne l'ai jamais essayé sur OneToOne, mais de la doc, il devrait fonctionner.
@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
@JoinColumn(name="Data_id")
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Data Data;
ou
@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="Data_id")
private Data Data;