2015-10-06 1 views
7

je suit la cartographie:5 HIBERNATE: classe génératrice = pas « séquence » de travail

<id name="id" type="java.lang.Long" column="id"> 
     <generator class="sequence"> 
      <param name="sequence">tracksdata_seq</param> 
     </generator> 
    </id> 

Tout est allé bien quand je travaillais avec elle dans Hibernate 4.2. Maintenant, je migre vers Hibernate 5 et face au problème suivant:

2015-10-06 19:49:50 DEBUG SQL:92 - select nextval ('hibernate_sequence') 
2015-10-06 19:49:50 DEBUG SqlExceptionHelper:122 - could not extract ResultSet [n/a] 
org.postgresql.util.PSQLException: ERROR: relation "hibernate_sequence" does not exist 

Comment résoudre ce problème?

P.S. Hibernate 5.0.2.Final.

+0

Il cherche la séquence hibernate_sequence, l'avez-vous mentionné dans le mapping ci-dessus? Vous avez tracksdata_seq, vous ne savez pas si cela fait référence à hyberante_sequence – Zeus

+0

Cela ne doit pas être fait pour hibernate_sequence - il doit utiliser tracksdata_seq, comme c'était le cas en hibernate 4.2. – maksim2020

+0

@ maksim2020 J'ai eu le même problème migrant de 4.3.8 à 5.0.6Final. Cela ne se produit que si vous utilisez des mappages XML. Je suis passé aux annotations JPA et cela a bien fonctionné. – Gustavo

Répondre

0

Je reproduire le problème dans Hibernate 5.0.2.Final. J'ai la valeur de changement pour la configuration hibernate.id.new_generator_mappings à false mais n'aide pas. Je me demande si Hibernate 5 supporte toujours le mappage XML.

+0

Hibernate supporte toujours les mappages XML. J'ai résolu mon problème en remplaçant par ET en changeant tous les champs correspondants dans ma base de données par type de série (dans PostgreSQL). – maksim2020

0

J'ai également rencontré ce problème lors de la migration d'Hibernate 4.3.10 vers Hibernate 5.0.4. Comme maksim2020, j'ai remplacé les instances de <generator class="sequence"> par <generator class="identity">. Cependant, pour conserver la séquence d'identifiants des tables affectées, j'ai également dû écrire un script de migration SQL qui définissait la valeur par défaut de la colonne comme étant la prochaine valeur de la séquence existante. Dans PostgreSQL cela se fait comme suit:

ALTER TABLE ONLY affected_table ALTER COLUMN affected_id SET DEFAULT nextval('original_sequence'::regclass); 
6

Vous avez deux options:

  1. Vous définissez la propriété de configuration hibernate.id.new_generator_mappings false et revenir aux anciens générateurs d'identifiant
  2. Vous modifiez le mappage comme suit, de:

    <generator class="sequence"> 
        <param name="sequence">MY_SEQUENCE</param> 
    </generator> 
    

    à:

    <generator class="org.hibernate.id.enhanced.SequenceStyleGenerator"> 
        <param name="optimizer">none</param> 
        <param name="increment_size">1</param> 
        <param name="sequence_name">MY_SEQUENCE</param> 
    </generator> 
    
0

Utilisation param name="sequence_name" au lieu de "sequence", cela a fonctionné pour moi.