J'utilise J'utilise hbm2ddl code> dans mon application basée sur hibernate pour générer le schéma de base de données. La valeur de hibernate.hbm2ddl.auto code> La propriété est create-goutte code>. @entity code> annotations pour mes classes de pojo. P> @Entity
public class testTable1 {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
Long id;
}
@Entity
public class testTable2 {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
Long id;
}
3 Réponses :
Vous utilisez le générateur de séquence global que l'hibernate fournit par défaut lorsque aucun générateur n'est fourni tel que spécifié par la spécification JPA. Pour avoir un générateur privé, vous devez déclarer un générateur privé avec l'annotation Extrait de Javadoc P> @generatedValue de par défaut du générateur d'identifiant fourni par le fournisseur de persistance. p>
séquenceGenerator Exemple: P>
hibernate recommande que de nouveaux projets utilisent hibernate.id.new_generator_mappings = true car les nouveaux générateurs sont plus efficaces et plus près de la spécification JPA 2 Spécifications Sémanque P> Section 1.3. Propriétés Exemple complet strong> p> @SEfenceGenerator Code> et définir l'attribut code> générateur code> du @generatedValue code> Annotation
(Facultatif) Nom du générateur de clés primaire à utiliser comme spécifié
dans l'annotation de séquence générateur ou de la table de table. p>
Cette annotation définit un générateur de clé primaire qui peut être référencé par son nom quand un
L'élément générateur est spécifié pour l'annotation généréeValue. UNE
Le générateur de séquence peut être spécifié sur la classe d'entité ou sur le
champ principal principal ou propriété. La portée du nom du générateur est
Global à l'unité de persistance (à travers tous les types de générateurs). p>
@SEfenceGenerator (nom = "EMP_SEQ", séquencename = "Private_ Suite") Code> P>
blockQuote>
2.2.3. Cartographie des propriétés d'identificateur p>
Vrai et je voudrais ajouter que si vous souhaitez définir la valeur initiale de la valeur et de l'allocation, vous devez inclure hibernate.id.new_generator_mappings = true. Ensuite, il vous suffit d'utiliser @SesfenseGenerator comme ceci: @SeSeLenceGenerator (InitialValue = 1, allocationsize = 1, nom = "privé_seq", séquencename = "Private_Srequence") ou quelles que soient les valeurs dont vous avez besoin pour donner.
@BreakingBenjamin Puis-je utiliser le même générateur de séquence même pour une entité multiple que celle indiquée ci-dessus et obtenez des valeurs d'identification exclusives uniformes dans chaque entité? Je veux dire que chaque identifiant d'entité commencera avec 1 et obtenir l'incrément de 1.
dans hibernate 5.2 fort>, J'avais essayé la réponse de Joel Hudon, mais je ne sais pas pourquoi cela ne fonctionne pas. P> J'ai trouvé des codes plus courts à résoudre IT. P> 3.2. La classe Java d'entité annotée p> Il pourrait donner un numéro de séquence unique. P> espère qu'il aide. P> P> P >
@Entity
public class MyEntity2 {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="myentity2_seq")
@SequenceGenerator(name = "myentity2_seq",sequenceName = "myentity2_seq_table")
private int id;
@Column(length = 100)
private String name;
//setters & getters ...
}
In the Database, it will create myentity2_seq_table Table for maintaining ids. we can customize table creation using initialValue = 100, allocationSize = 10 in SequenceGenerator.