2011-04-04 3 views
0

Je veux avoir une entité avec la stratégie AUTO IdGeneration, j'ai besoin de travailler à la fois sur Oracle et MySQL, et j'ai besoin de spécifier des noms de séquence pour chaque entit dans le cas d'Oracle.stratégie JPA IdGeneration AUTO

Quand j'annoter la clé primaire comme:

@Id 
@Column(name="id") 
@GeneratedValue(strategy= GenerationType.AUTO, generator="sequence") 

J'ai une erreur sur MySQL générateur de séquence est inconnue.

et si j'utilise

@Id 
@Column(name="id") 
@GeneratedValue(strategy= GenerationType.AUTO) 

Je ne peux pas spécifier le nom de séquence pour chaque table. Est-ce une façon de résoudre ce problème?

J'utilise Hibernate comme mon fournisseur JPA

Répondre

0

Vous déclarez champ id comme:

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY, 
    generator = "LegacyIdGenerator") 
@GenericGenerator(
    name = "LegacyIdGenerator", 
    strategy = "com.backend.hibernate.PenetratingIdGenerator") 

où PenetratingIdGenerator est votre générateur d'ID personnalisé mis en œuvre l'interface IdentifierGenerator. Vous pouvez maintenant générer l'ID comme vous le souhaitez en fonction de votre base de données sous-jacente. De toute façon, votre application saura que la base de données est sous-jacente, car vous devez définir différents dialectes et etc. dans les fichiers de configuration.

0

Pour l'annotation @GeneratedValue(strategy = GenerationType.AUTO), le fournisseur de persistance JPA prendra une stratégie appropriée pour la base de données particulière. Pour la base de données Oracle, ce sera SEQUENCE et, si vous ne spécifiez rien, Hibernate utilisera une seule séquence globale i.e hibernate_sequence.

@Id 
@GeneratedValue(strategy=GenerationType.AUTO, generator="seq_gen_default") 
@SequenceGenerator(name="seq_gen_default", sequenceName="ENTITY_SEQ") 
private Long id; 
Questions connexes