2010-05-10 4 views
6

Nous rencontrons un problème où nous avons des sous-classes d'événements qui utilisent GenerationType.TABLE pour générer la clé primaire, et lorsque nous redémarrons les serveurs, nous obtenons des erreurs de clé primaire en double.Hibernate dupliquer clé primaire au redémarrage en utilisant GenerationType.TABLE

Nous utilisons SQL Server et Hibernate version 3.5.1-Final.

Voici ce que nos annotations Hibernate ressemblent:

@Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public abstract class Event { 

    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    private long eventID; 

nous ne précisons pas le allocationSize donc nous utilisons la valeur par défaut. La table des séquences d'hibernation ne s'incrémente pas mais il semble qu'au redémarrage, elle réutilise les ID déjà utilisés.

Répondre

0

Essayez GenerationType.AUTO ou SEQUENCE. AUTO peut fonctionner via la magie hibernate, mais SEQUENCE devrait créer, assez curieusement, une séquence dans la base de données qu'il utilisera pour obtenir des ID uniques. Quel serveur SQL utilisez-vous?

+0

Vous ne pouvez pas utiliser GenerationType.AUTO avec InheritanceType.TABLE_PER_SUBCLASS. Google "Impossible d'utiliser la génération de clé de colonne d'identité avec le mappage pour" – ndtreviv

Questions connexes