@OneToOne et les annotations @JoinColumn, de suppression automatique null entité , c'est faisable?
J'ai deux Entités , avec les annotations 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;
}
Propriétaire et de Données a one-to-one mapping , c'est le propriétaire de côté est Propriétaire.
Le problème se produit lorsque j'execute : propriétaire.setData(null) ; ownerDao.mise à jour(propriétaire) ;
Le "Propriétaire" de la table de Data_id devient nulle , ce qui est correct.
Mais les "Données" de ligne n'est pas supprimée automatiquement.
Je dois écrire un autre DataDao , et une autre couche de service à envelopper les deux actions ( ownerDao.mise à jour(le propriétaire) ; dataDao.supprimer(données); )
Est-il possible de faire une ligne de données est automatiquement supprimé lorsque le propriétaire des Propriétaire mis à null ?
Vous devez vous connecter pour publier un commentaire.
En fonction de votre version d'hibernate, utilisation :
utiliser le cascadeType : DELETE_ORPHAN ou orphanRemoval=true sur la @OneToOne annotation
documentation : http://docs.jboss.org/hibernate/core/3.3/reference/en/html/objectstate.html#objectstate-transitive
Je n'ai jamais essayé sur OneToOne, mais à partir de la doc, ça devrait fonctionner.
ou
EDIT:
j'ai trouvé ce post DONC : Des solutions de contournement pour Hibernate manque de delete-orphan l'appui de un-à-un et plusieurs-à-un les relations?
Donc perhap est qu'il ne fonctionne pas. Les deux réponses décrire deux solutions de contournement cependant.
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
. J'ai eu du succès en utilisant soitFetchType.LAZY
ouFetchType.EAGER
.EAGER
est par défaut.