J'ai deux entités, avec les annotations JPA suivantes:@OneToOne et @JoinColumn, entité de suppression automatique de caractère nul, faisable?
@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'exécute: owner.setData (null); ownerDao.update (propriétaire); La Data_id de la table "Propriétaire" devient nulle, c'est correct. Mais la ligne "Données" n'est pas supprimée automatiquement. Je dois écrire un autre DataDao, et une autre couche de service pour envelopper les deux actions (ownerDao.update (propriétaire); dataDao.delete (data);)
Est-il possible de faire une ligne de données automatiquement supprimée lorsque le propriétaire Le propriétaire l'a mis à null?
Merci, ça marche !!! Et ... CascadeType.DELETE_ORPHAN est obsolète. Il est remplacé par @OneToOne (fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true) – smallufo
FetchType.EAGER est essentiel pour la suppression des orphelins, il semble. La suppression FetchType.LAZY orpheline ne fonctionne pas. Hibernate version 4.3.10.FINAL. –
En utilisant Hibernate 5.0.11.FINAL, c'était suffisant pour moi '@OneToOne (cascade = CascadeType.ALL, orphanRemoval = true)'. J'ai réussi à utiliser 'FetchType.LAZY' ou' FetchType.EAGER'. 'EAGER' est par défaut. –