it-swarm.com.de

hibernate Erstellen einer leeren Tabelle - hibernate_sequence beim Start

Also habe ich gerade Hibernate 5.0.0.1 heruntergeladen und mein Projekt dazu versucht, das zuvor mit Hibernate 4.3 arbeitet.

Beim Einfügen in die Datenbank wird dieser Fehler angezeigt:

FEHLER: Es konnte kein hoher Wert gelesen werden - Sie müssen die Tabelle auffüllen: hibernate_sequence

Ich benutze Mysql, und meine Generierungsstrategie ist auf GenerationType.auto festgelegt, und es scheint, dass der Hibernat jetzt der Meinung ist, dass die Verwendung von Sequenzen die beste Strategie zum Generieren von Werten ist. Aber der Tisch ist leer. Ich denke, dass der Winterschlaf versucht, einen Wert aus der Sequenz zu ermitteln, aber keinen finden kann. Aber ich bin verwirrt, weil die hibernate_sequence durch hibernate erstellt wird. Kann sie nicht einen Anfangswert liefern?

11
morbidCode

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

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

Wenn Sie die Identitätsspalte einer Tabelle verwenden möchten:

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

In diesem Thread finden Sie möglicherweise weitere Informationen: https://forums.hibernate.org/viewtopic.php?f=1&t=999785&start=0

@GeneratedValue JPA-Anmerkung

In diesen Tutorials haben wir oft den @GeneratedValue .__ verwendet. Anmerkung, damit die Datenbank einen eindeutigen Primärschlüssel für uns generiert. Wir haben in jedem unserer Beispiele den Standardgenerations-Typ verwendet, jedoch Es gibt tatsächlich vier verschiedene Strategien, um die primäre zu haben Schlüssel generiert von der Datenbank. Diese vier Optionen sind:

AUTO IDENTITY TABLE SEQUENCE javax.persistence.GenerationType.AUTO

Die AUTO-Generierungsstrategie ist die Standardeinstellung und diese Einstellung ist einfach wählt die Primärschlüssel-Generierungsstrategie aus, die der Standardwert für .__ ist. die betreffende Datenbank, die in der Regel IDENTITY ist, obwohl es kann TABLE oder SEQUENCE sein, abhängig davon, wie die Datenbank ist konfiguriert. Die AUTO-Strategie wird normalerweise empfohlen, da sie Ihr Code und Ihre Anwendungen am tragbarsten.

javax.persistence.GenerationType.IDENTITY

Mit der Option IDENTITY kann die Datenbank einfach ein eindeutiges .__ erzeugen. Primärschlüssel für Ihre Anwendung. Keine Sequenz oder Tabelle wird für .__ verwendet. Verwalten Sie die Informationen zum Primärschlüssel, stattdessen wird die Datenbank Wählen Sie einfach eine geeignete, eindeutige Nummer für den Ruhezustand aus, die der .__ zugewiesen werden soll. Primärschlüssel der Entität. Bei MySQL die erste unterste Nummer Der in der betreffenden Tabelle verfügbare Primärschlüssel wird ausgewählt, obwohl Dieses Verhalten kann sich von Datenbank zu Datenbank unterscheiden.

javax.persistence.GenerationType.Sequence

Einige Datenbankanbieter unterstützen die Verwendung eines Datenbanksequenzobjekts zur Pflege der Primärschlüssel. Um eine Sequenz zu verwenden, setzen Sie die GenerationType-Strategie auf SEQUENCE, geben Sie den Namen des Generators an Annotation und geben Sie dann die Annotation @SequenceGenerator an, die hat Attribute zum Definieren des Namens der Sequenzanmerkung und der Name des tatsächlichen Sequenzobjekts in der Datenbank.

20
John Manko

Es wurde erstellt, weil der Ruhezustand die Tabelle verwendet, um die automatische Inkrement-ID zu verfolgen (nächster Wert der ID)

Ex-

@Id
@GeneratedValue
int id;
1
Rajitha Yasas

Einfache Lösung:

erstellen Sie die hibernate_sequence-Tabelle als:

"create sequence <schema/db>.hibernate_sequence"
0
Riddhi Gohil