Hibernate séquence sur oracle, @GeneratedValue(stratégie = GenerationType.AUTO)
Je suis avec @GeneratedValue(stratégie = GenerationType.AUTO) pour générer l'ID sur mon entité.
Je ne sais pas maintenant comment il fonctionne, mais sur ma table enfant, génère des valeurs d'ID, qui suivent la séquence parent.
//parent table
@Entity
@Table (name = "parent")
public class Parent {
@Id
@GeneratedValue (strategy = GenerationType.AUTO)
@Column (name = "id")
private long id;
@OneToMany (cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
@JoinColumn (name = "parentId")
@ForeignKey (name = "FKparent")
private List<child> child;
}
//child table
@Entity
@Table (name = "child")
public class Child {
@Id
@GeneratedValue (strategy = GenerationType.AUTO)
@Column (name = "id")
private long id;
}
L'ID inséré valeurs des parents, des mises à jour de la séquence.
L'insertion des valeurs d'ID de l'enfant, les mises à jour de la séquence.
Sur la prochaine insertion de parent, la séquence... utilise les valeurs mises à jour par enfant insertions...
Ce Annotations, ne sont pas la création de deux séquences, une seule. Est-ce correct ou s'attend-on?
J'ai inséré mon entités avec mon DAO service uniquement à l'aide de entityManager.persist(parent);
Vous devez vous connecter pour publier un commentaire.
C'est le comportement attendu. Lors de l'utilisation de
@GeneratedValue(strategy = GenerationType.AUTO)
, la JPA fournisseur de choisir une stratégie appropriée de la base de données particulière. Dans le cas d'Oracle, ce sera de la SÉQUENCE et, puisque vous ne spécifiez rien, Hibernate utilisera une seule global de la séquence appeléehibernate_sequence
.Est-ce correct? Eh bien, je ne sais pas, cela dépend de vos besoins. Juste au cas où, la valeur maximale par défaut pour une séquence Oracle est 1E+27, ou 1,000,000,000,000,000,000,000,000,000. C'est assez pour beaucoup de.
Maintenant, il est possible d'utiliser
GenerationType.AUTO
et contrôlent toujours le nom de la séquence lorsque la base de données utilise des séquences:Oui c'est exact, et prévu.
Vous pouvez créer des séquences individuelles pour chaque table, mais à mon humble avis c'est juste un code supplémentaire sans réel de la prestation.