L'objectif est de supprimer tous les dépendants lorsque leur propriétaire est supprimé. J'ai les classes suivantes:Comment puis-je spécifier une dépendance dans JPA sans liens de l'entité propriétaire?
@Entity
class Dependent {
@ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY, optional = false)
@Column(name = "OWNER")
private Owner _owner;
}
@Entity
class Owner {
...
}
Dans l'implémentation actuelle Dependent existe toujours après que son propriétaire a été supprimé. Le propriétaire n'a aucun lien vers Dependent et ne peut pas être modifié, donc je ne peux pas utiliser l'annotation @Dependent ou cascade = DELETE.
Est-ce que JPA supporte une telle "dépendance inverse"? Une autre question est qu'est-ce que optional = "false" garantit pendant que le champ _owner est supprimé?
La classe Owner ne peut pas être modifiée. êtes-vous sûr que JPA ne fournit pas une option pour spécifier la dépendance dans la classe dépendante? alors qu'est-ce que "optional = 'false'" pour? – oakjumper
'optional = false' déclare simplement quel côté est responsable du mappage; vous avez toujours besoin de la cartographie dans les deux classes. Si vous ne pouvez pas modifier la classe propriétaire, vous devez utiliser des requêtes natives et tout faire manuellement. Ne pas oublier de rincer les caches à chaque fois. –
Votre problème est "La classe du propriétaire ne peut pas être modifiée". C'est le problème que vous devez résoudre. Vous devez décider s'il est plus complexe de modifier la classe propriétaire ou de passer quelques semaines à déboguer la solution de contournement. Ou peut-être vous pouvez mapper la classe propriétaire avec un fichier HBM. Si vous utilisez Spring, vous pouvez facilement mélanger des annotations avec l'ancienne configuration XML. –