Types de cascade Hibernate et JPA quand utiliser lequel et où

J’utilise Hibernate sur un projet et je ne sais vraiment pas quand utiliser org.hibernate.annotations.CascadeType et quand utiliser les annotations javax.persistence.CascadeType.

Par exemple, quand je devrais utiliser quelque chose comme ceci:

@OneToMany(fetch = FetchType.LAZY, cascade = javax.persistence.CascadeType.ALL) 

vs quelque chose comme ça:

 @OneToMany(fetch = FetchType.LAZY) @Cascade(org.hibernate.annotations.CascadeType.ALL) 

J’ai également lu que hibernate ignorerait certains types de cascade figurant dans les annotations un à xxxx. Est-ce que quelqu’un peut me remettre en ordre?

En général, vous trouverez de nombreux exemples de ce type de chevauchement lorsque vous utilisez Hibernate. Il peut y avoir plusieurs raisons différentes à cela. Soit pour des raisons héritées (Hibernate a créé l’annotation avant qu’elle ne soit normalisée en JPA), soit parce qu’Hibernate prend en charge davantage de fonctionnalités que ce que le standard JPA permet, ou parce qu’elles diffèrent légèrement par leur sémantique.

Dans ce cas, la documentation d’Hibernate explique très clairement pourquoi @Cascade existe lorsque @OneToMany(cascade=...) est la norme. L’annotation Hibernate ( @Cascade ) vous offre beaucoup plus d’options que celle standard JPA, et sa sémantique est légèrement différente.

Vous devriez toujours préférer utiliser les annotations JPA standard tant que vous n’avez pas besoin de fonctionnalités / sémantique spéciales d’Hibernate.