web-dev-qa-db-fra.com

La séquence Hibernate n'existe pas

J'ai essayé de mettre à niveau l'hibernation de 4 à 5 dans mon projet avec la version print 4.2. Après cette mise à niveau, j'ai trouvé l'erreur suivante dans ma trace de pile lorsque j'ai appelé une méthode de mise à jour.

10:53:32,185 ERROR TableStructure:149 - could not read a hi value
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.hibernate_sequence' doesn't exist 

J'ai changé l'identifiant auto incrémenté avec annotation 

@GeneratedValue(strategy=GenerationType.AUTO) 

encore l'erreur reste.

72
rParvathi

Vous devez définir <prop key="hibernate.id.new_generator_mappings">false</prop> .. voir link et link .

70
rParvathi

Vous pouvez aussi mettre:

@GeneratedValue(strategy = GenerationType.IDENTITY)

Et laissez la base de données gérer l’incrémentation de la clé primaire:

AUTO_INCREMENT PRIMARY KEY
99
Kikou

Travailler avec Spring Boot

Solution

Placez la chaîne ci-dessous dans .application.properties

spring.jpa.properties.hibernate.id.new_generator_mappings=false

Explication

Sur Hibernate 4.X, cet attribut a par défaut la valeur true.

26
RivanMota

C'est la raison derrière cette erreur:

Il cherchera comment la base de données que vous utilisez génère des identifiants. Pour MySql ou HSQSL, il existe des champs d’incrémentation qui s’incrémentent automatiquement. Dans Postgres ou Oracle, ils utilisent des tables de séquence. Comme vous n'avez pas spécifié de nom de table de séquence, il recherchera une table de séquence nommée hibernate_sequence et l'utilisera par défaut. Donc, vous n'avez probablement pas une telle table de séquence dans votre base de données et maintenant vous obtenez cette erreur.

20
Vikki

Je recevais la même erreur "com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: La table 'mylocaldb.hibernate_sequence' n'existe pas".

En utilisant spring mvc 4.3.7 et hibernate version 5.2.9, l’application est réalisée à l’aide de la configuration Java printanière. Maintenant, je dois ajouter la propriété hibernate.id.new_generator_mappings mentionnée par @Eva Mariam dans mon code comme ceci:

@Autowired
    @Bean(name = "sessionFactory")
    public SessionFactory getSessionFactory(DataSource dataSource) {

        LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);
        sessionBuilder.addProperties(getHibernateProperties());
        sessionBuilder.addAnnotatedClasses(User.class);

        return sessionBuilder.buildSessionFactory();
    }

    private Properties getHibernateProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.show_sql", "true");
        properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
        properties.put("hibernate.id.new_generator_mappings","false");
        return properties;
    }

Et cela a fonctionné comme un charme.

14
Rajan Chauhan

FYI

Si vous utilisez des fichiers hbm pour définir le mappage O/R.

Remarquerez que:

Dans Hibernate 5, le nom du paramètre pour le nom de la séquence a été modifié .

Le paramètre suivant a bien fonctionné dans Hibernate 4 :

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

Mais dans Hibernate 5 , le même fichier de réglage de mappage provoquera une erreur "hibernate_sequence n'existe pas".

Pour corriger cette erreur, le nom du paramètre doit changer en:

<generator class="sequence">
    <param name="sequence_name">xxxxxx_seq</param>
</generator>

Ce problème m'a perdu 2, 3 heures.

Et d'une manière ou d'une autre, il semble qu'il n'y ait aucun document à ce sujet.

Je dois lire le code source de org.hibernate.id.enhanced.SequenceStyleGenerator pour le comprendre.

11
Li Ying

dans hibernate 5.x, vous devez ajouter la valeur false à hibernate.id.new_generator_mappings dans hibernate.cfg.xml

<session-factory>
    ......
    <property name="show_sql">1</property>
    <property name="hibernate.id.new_generator_mappings">false</property>
     ......
 </session-factory>
4
tekintian

J'utilise Spring Boot et j'ai corrigé le problème en ajoutant la ligne suivante dans le fichier application.properties:

spring.jpa.properties.hibernate.id.new_generator_mappings = false    
1
ankur saxena

Vous pouvez aussi mettre:

@GeneratedValue(strategy = GenerationType.IDENTITY)

Et laissez la base de données gérer l’incrémentation de la clé primaire:

AUTO_INCREMENT PRIMARY KEY

La réponse ci-dessus m'a aidé.

0

Juste au cas où quelqu'un s'arracherait les cheveux avec ce problème comme je le faisais aujourd'hui, je ne pourrais pas résoudre cette erreur tant que je n'aurais pas changé

spring.jpa.hibernate.dll-auto=create

à

spring.jpa.properties.hibernate.hbm2ddl.auto=create
0
JMoney

Dans mon cas, le remplacement de toutes les annotations GenerationType.AUTO par GenerationType.SEQUENCE a résolu le problème.

0
wwesantos

J'ai ajouté la séquence Hibernate dans postgres . Exécutez cette requête dans l'éditeur PostGres:

    CREATE SEQUENCE hibernate_sequence
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 2
  CACHE 1;
ALTER TABLE hibernate_sequence
  OWNER TO postgres;

Je découvrirai les avantages et les inconvénients de l’utilisation de la requête, mais ceux qui ont besoin d’aide peuvent l’utiliser.

0
Chinmoy

Ceci peut être causé par HHH-10876 qui a été corrigé, assurez-vous de l'actualiser:

  • Hibernate ORM 5.2.1, 
  • Hibernate ORM 5.1.1, 
  • Hibernate ORM 5.0.11
0
Vlad Mihalcea