vendredi 5 juin 2009

Erreur : SQLGrammarException: could not get next sequence value avec Hibernate et JPA

Bonjour,
si vous utilisez Hibernate avec JPA sur une base Oracle, sur les clés, vous pouvez avoir l'exception suivante :

org.hibernate.exception.SQLGrammarException: could not get next sequence value


La raison de l'erreur est pour les clés auto incrémentées. Il faut pour que ça marche, créer une séquence.
On va mettre en place la solution sur mon exemple : une table Banque

Voici ma classe de mapping :
@Entity //entité JPA
public class Banque
{
@Id //c'est la clé primaire
@GeneratedValue() //c'est une clé générée (auto incrémentée)
@Column(name="refbqe") //nom de la colonne dans la table
private Integer id;

//les colonnes dans la table
private String Cdepos;

...

+ getter/setter
}


Connectez vous sur votre base et crééz une séquence BANQUE_SEQUENCE :

create sequence BANQUE_sequence
start with 1
increment by 1
nomaxvalue;


Cette séquence sera utilisée pour générer les clés de la table Banque. Modifier la classe Banque comme ceci :
@Entity
public class Banque
{
@Id
@SequenceGenerator(name="sequence",sequenceName="BANQUE_sequence")
@GeneratedValue(GenerationType.SEQUENCE,generator="sequence")
@Column(name="refbqe")
private Integer id;

//les colonnes dans la table
private String Cdepos;

...

+ getter/setter
}

(notez le rajout de SequenceGenerator et la modification de GeneratedValue)

Voili, c'est tout, ça devrait marcher maintenant !!

A+

Aucun commentaire:

Enregistrer un commentaire