it-swarm.com.de

Die Ruhezustandsequenz existiert nicht

Ich habe versucht, den Hibernate-Modus von 4 auf 5 in der Spring-Version 4.2 zu aktualisieren. Nach diesem Upgrade habe ich beim Aufrufen einer Aktualisierungsmethode den folgenden Fehler in meiner Stack-Ablaufverfolgung gefunden.

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 

Ich habe die automatisch erhöhte ID mit Annotation geändert 

@GeneratedValue(strategy=GenerationType.AUTO) 

trotzdem bleibt der Fehler bestehen.

72
rParvathi

Sie müssen <prop key="hibernate.id.new_generator_mappings">false</prop> .. einstellen, siehe link und link .

70
rParvathi

Sie können auch setzen:

@GeneratedValue(strategy = GenerationType.IDENTITY)

Lassen Sie die Datenbank die Erhöhung des Primärschlüssels verwalten:

AUTO_INCREMENT PRIMARY KEY
99
Kikou

Arbeiten mit Spring Boot

Lösung

Fügen Sie die Zeichenfolge unten in .application.properties ein

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

Erläuterung

Im Ruhezustand 4.X ist dieses Attribut standardmäßig true.

26
RivanMota

Dies ist der Grund für diesen Fehler:

Es wird geprüft, wie die von Ihnen verwendete Datenbank IDs generiert. Für MySql oder HSQSL gibt es Inkrementierungsfelder, die automatisch inkrementiert werden. In Postgres oder Oracle verwenden sie Sequenztabellen. Da Sie keinen Sequenztabellennamen angegeben haben, wird nach einer Sequenztabelle mit dem Namen hibernate_sequence gesucht und als Standardwert verwendet. Sie haben also wahrscheinlich keine solche Sequenztabelle in Ihrer Datenbank und jetzt erhalten Sie diesen Fehler.

20
Vikki

Ich habe die gleiche Fehlermeldung erhalten "com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Tabelle 'mylocaldb.hibernate_sequence' existiert nicht".

Bei der Verwendung von Spring MVC 4.3.7 und der Hibernate-Version 5.2.9 erfolgt die Anwendung mit einer auf Java basierenden Spring-Konfiguration. Jetzt muss ich die von @Eva Mariam erwähnte hibernate.id.new_generator_mappings-Eigenschaft in meinem Code folgendermaßen hinzufügen:

@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;
    }

Und es hat wie ein Zauber funktioniert.

14
Rajan Chauhan

Zu Ihrer Information

Wenn Sie hbm-Dateien verwenden, um die O/R-Zuordnung zu definieren.

Beachte das:

In Hibernate 5 wurde der Parametername für den Sequenznamen geändert .

Folgende Einstellung hat in Hibernate 4 gut funktioniert:

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

In Hibernate 5 verursacht dieselbe Mapping-Einstellungsdatei den Fehler "hibernate_sequence ist nicht vorhanden".

Um diesen Fehler zu beheben, muss der Parametername geändert werden in:

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

Dieses Problem verschwendete mich 2, 3 Stunden.

Und irgendwie sieht es so aus, als gäbe es kein Dokument darüber.

Ich muss den Quellcode von org.hibernate.id.enhanced.SequenceStyleGenerator lesen, um es herauszufinden

11
Li Ying

in hibernate 5.x sollten Sie set hibernate.id.new_generator_mappings in hibernate.cfg.xml auf false setzen

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

Wenn Sie verwenden

@GeneratedValue(strategy=GenerationType.AUTO)

oder

@GeneratedValue Kurz gesagt, beginnt Hibernate, die beste Generierungsstrategie für Sie zu bestimmen. In diesem Fall hat Hibernate diese ausgewählt

GenerationType.SEQUENCE Als Strategie und darum sucht es

schemaName.hibernate_sequence Ist eine Tabelle zur sequenzbasierten ID-Generierung.

Wenn Sie GenerationType.SEQUENCE Als Strategie verwenden, müssen Sie @TableGenerator Wie folgt bereitstellen.

     @Id
     @GeneratedValue(strategy = GenerationType.TABLE, generator = "user_table_generator")
     @TableGenerator(name = "user_table_generator",
                table = "user_keys", pkColumnName = "PK_NAME", valueColumnName = "PK_VALUE")
     @Column(name = "USER_ID")
     private long userId;

Wenn Sie die Strategie festlegen, ist es das zu

@GeneratedValue(strategy = GenerationType.IDENTITY).

das ursprüngliche Problem wurde behoben, da der Ruhezustand dann aufhört, nach einer Sequenztabelle zu suchen.

3
Kalpa

Ich verwende Spring Boot und wie ich das behoben habe, indem ich die folgende Zeile in die application.properties-Datei eingefügt habe:

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

Sie können auch setzen:

@GeneratedValue(strategy = GenerationType.IDENTITY)

Lassen Sie die Datenbank die Erhöhung des Primärschlüssels verwalten:

AUTO_INCREMENT PRIMARY KEY

Die obige Antwort hat mir geholfen.

Nur für den Fall, dass jemand sich bei diesem Problem wie heute die Haare ausreißt, konnte ich diesen Fehler erst beheben, wenn ich mich geändert habe

spring.jpa.hibernate.dll-auto=create

zu

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

In meinem Fall konnte das Problem behoben werden, indem alle Anmerkungen GenerationType.AUTO durch GenerationType.SEQUENCE ersetzt wurden.

0
wwesantos

Ich habe die Hibernate-Sequenz in postgres ..__ hinzugefügt. Diese Abfrage in PostGres Editor ausführen:

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

Ich werde die Vor- und Nachteile der Verwendung der Abfrage herausfinden, aber für jemanden, der Hilfe benötigt, kann dies verwendet werden.

0
Chinmoy

Dies könnte durch HHH-10876 verursacht worden sein, das behoben wurde.

  • Ruhezustand ORM 5.2.1, 
  • Winterschlaf ORM 5.1.1, 
  • Ruhezustand ORM 5.0.11
0
Vlad Mihalcea