2015-09-06 9 views
9

Also habe ich gerade heruntergeladen Hibernate 5.0.0.1, und ich habe versucht, mein Projekt, das zuvor mit Hibernate 4.3. Hibernate Erstellen leerer Tabelle - Hibernate_sequence beim Start

Als ich in die Datenbank einfügen, es gibt mir diese Fehlermeldung:

ERROR: could not read a hi value - you need to populate the table: hibernate_sequence

ich mysql benutze und meine Generation Strategie bei GenerationType.auto gesetzt, und es scheint, dass jetzt Hibernate denkt, dass Sequenzen unter Verwendung die beste Strategie um Werte zu generieren. Aber der Tisch ist leer. Ich denke, Hibernate versucht, einen Wert aus der Sequenz zu erhalten, kann aber keine finden. Aber ich bin verwirrt, weil die Hibernate_Sequenz von Hibernate erstellt wird, sollte es nicht einen Anfangswert bereitstellen?

Antwort

15

Die Sequenztabelle hängt davon ab, wie Sie den Primärschlüssel für eine oder alle Ihrer Entitäten definiert haben.

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) // or GenerationType.SEQUENCE 
protected Long id; 

Wenn Sie eine Tabelle, die Identität Spalte verwenden:

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
protected Long id; 

Das könnte dir diesen Thread für weitere Informationen zu überprüfen: https://forums.hibernate.org/viewtopic.php?f=1&t=999785&start=0

@GeneratedValue JPA Annotation

Quite often in these tutorials, we have used the @GeneratedValue annotation to have thedatabase generate a unique primary key for us. We have used the default Generation Type in each of our examples, but there are actually four different strategies for having the primary key generated by the database. Those four options are:

AUTO IDENTITY TABLE SEQUENCE javax.persistence.GenerationType.AUTO

The AUTO generation strategy is the default, and this setting simply chooses the primary key generation strategy that is the default for the database in question, which quite typically is IDENTITY, although it might be TABLE or SEQUENCE depending upon how the database is configured. The AUTO strategy is typically recommended, as it makes your code and your applications most portable.

javax.persistence.GenerationType.IDENTITY

The IDENTITY option simply allows the database to generate a unique primary key for your application. No sequence or table is used to maintain the primary key information, but instead, the database will just pick an appropriate, unique number for Hibernate to assign to the primary key of the entity. With MySQL, the first lowest numbered primary key available in the table in question is chosen, although this behavior may differ from database to database.

javax.persistence.GenerationType.Sequence

Some database vendors support the use of a database sequence object for maintaining primary keys. To use a sequence, you set the GenerationType strategy to SEQUENCE, specify the name of the generator annotation, and then provide the @SequenceGenerator annotation that has attributes for defining both the name of the sequence annotation, and the name of the actual sequence object in the database.

+1

aber meine Strategie auf auto zu verfolgen, und ich glaube, ich würde Verwenden Sie, was Winterschlaf denkt, ist die beste Strategie. Aber wie kann ich die Sequenz durch den Ruhezustand bevölkern? – morbidCode

+2

Der letzte Punkt im Zitat sagt alles. Ehrlich gesagt, benutzen Sie AUTO nicht, es sei denn IDENTITY funktioniert nicht für Sie. Die meisten Datenbanken unterstützen eindeutige Identifikatoren pro Tabelle. –

1

Simple solution :

erstellen hibernate_sequence Tabelle als :

"create sequence <schema/db>.hibernate_sequence" 
1

Es wird erstellt, da Hibernate, dass die Tabelle mit Autoinkrement Id (Next Wert der ID)

Ex-

@Id 
@GeneratedValue 
int id;