Séquence Hibernate pour les colonnes non-ID
L'utilisation de séquences de base de données pour générer des valeurs pour les colonnes de clé non primaire dans Hibernate est une exigence courante. Malheureusement, hibernate ne fournit actuellement aucune méthode intégrée pour y parvenir.
L'annotation @GeneratedValue ne peut être utilisée qu'en conjonction avec @Id pour générer automatiquement des valeurs pour les clés primaires. Le défi se pose car Hibernate suppose que les propriétés non-ID doivent être gérées par l'application utilisateur.
Pour surmonter cette limitation, une solution de contournement consiste à créer une entité distincte avec un identifiant généré automatiquement. Cette entité devient alors responsable de la génération de la valeur de séquence qui peut être attribuée à la propriété non-ID dans l'entité cible.
Considérons l'exemple suivant :
@Entity public class GeneralSequenceNumber { @Id @GeneratedValue(...) private Long number; } @Entity public class MyEntity { @Id private Long id; @OneToOne(...) private GeneralSequenceNumber myVal; }
Dans ce scénario, un une nouvelle instance de GeneralSequenceNumber est créée et son champ numérique est généré automatiquement. Cette valeur est ensuite attribuée à la propriété myVal dans MyEntity pendant la persistance de l'entité.
Bien que cette solution de contournement ajoute une entité supplémentaire, elle fournit une solution pour gérer les séquences de propriétés non-ID dans Hibernate. En attendant qu'une approche plus transparente soit mise en œuvre, cette méthode offre une solution pratique à ce cas d'utilisation courant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!