2017-03-15 2 views
1

Ich habe ein Problem - ich bekomme eine "Zeilengröße zu groß (> 8126)." Fehler beim Versuch, meine Datenbanktabelle mit Hibernate zu erstellen (dazu verwende ich die Eigenschaft hibernate.hbm2ddl.auto auf "create").Zeilengröße zu groß (> 8126) Hibernate

Das Problem ist, dass ich ein paar Spalten habe, die TEXT sein sollen, nicht VARCHAR. Anscheinend sind die Zeilen in diesen Spalten zu groß und ich erhalte den obigen Fehler.

Die Art, wie ich Hibernate konfiguriert habe, verwendet Mapping-Dateien.

Hier ist, wie einer der zugeordneten Eigenschaften wie folgt aussieht:

<property name="transmission_current_range" type="java.lang.String" length="65535"> 
     <column name="TRANSMISSION_CURRENT_RANGE"/> 
</property> 

Hinweis ich die Länge bis 65535 in der Hoffnung gesetzt, dass das mein Problem lösen, aber es funktioniert nicht.

Wie sagen Sie Hibernate, dass diese Spalte ein TEXT, kein VARCHAR sein soll? Ich habe Beispiele mit Adnotationen gesehen, aber ich möchte das Gleiche mit meiner Mapping-Datei machen.

Auch, was ist der entsprechende Java-Typ für TEXT? Ich suchte nach diesem, aber ich fand nur java.lang.String, das ist der gleiche Datentyp, der für VARCHAR und TEXT verwendet wird, also hilft es nicht.

EDIT: Anscheinend ist dieses Thema nicht, weil ich die Daten in „TEXT“ anstelle von „String ändern müssen, aber weil ich so viele Spalten haben, die jede Zeile (Reihe) überschreitet die Grenze von 8126.

Ich bekomme diesen Fehler jetzt:

"Zeilengröße zu groß. Die maximale Zeilengröße für den verwendeten Tabellentyp ohne Berücksichtigung von BLOBs ist 8126. Dies schließt den Speicheraufwand ein, siehe Handbuch. Sie müssen einige Spalten zu TEXT oder BLOBs

EDIT2: Offenbar ist der Grund für diesen Fehler die Tatsache, dass ich so viele Spalten habe, dass die Zeilenlänge viel zu groß wird. So ist es nicht eine Frage von zu haben TEXT statt VARCHAR per se, sondern, ich habe einfach zu viel „Daten“ in Bezug auf die Spaltenlänge.

Ändern der innodb_strict_mode = 0 in der mysql CFG-Datei das Problem gelöst, aber wenn ich lassen Hibernate erstellen die Datenbank Die erstellten Spalten waren wiederum BLOB, nicht ihre ursprünglichen Datentypen (einige von ihnen wurden immer noch als ihr ursprünglicher Datentyp beibehalten.)

Dies nur als ein Kopf für jeden, der meine Lösung wählt.

Antwort

0

OK, ich habe es geschafft, mein Problem zu lösen. Die Lösung war diese Zeile, in der "/etc/mysql/my.cnf" Datei eingefügt, in der [mysqld] Kategorie:

innodb_strict_mode = 0 

Das ist es. Jetzt kann ich alle meine Spalten einfügen und bekomme den Fehler nicht mehr.

0

Verwenden text statt java.lang.String:

<property name="transmission_current_range" 
    type="text" length="65535"> 
     <column name="TRANSMISSION_CURRENT_RANGE"/> 
</property> 
+0

Ich habe alle vorherigen "Java" geändert.lang.String "tippt genau zu dem, was Sie oben haben, und ich bekomme immer noch den Fehler. Jetzt sind die Spalten vom Typ" longtext "generiert, aber ich bekomme den gleichen Fehler. –

+1

OK, das ist gut. Das bedeutet jetzt, dass Ihre Datenbank-Engine benötigt mehr Konfiguration, zum Beispiel im Falle von MySQL: http://StackOverflow.com/q/15585602/248082 – nobeh

+0

Ich sehe, dass das für InnoDB ist Ich arbeite mit MySQL –

0

Hibernate Dokumentation erwähnt sql-type eines <column> Element. Sie können versuchen mit:

<column name="TRANSMISSION_CURRENT_RANGE" sql-type="text"/> 
+0

Haben Sie Ihren Rat auch versucht, bekomme ich den gleichen Fehler. Dies ergibt keinen Sinn. Auch der Vorschlag von Hibernate ist so vage: "Zeilengröße zu groß (> 8126). Das Ändern einiger Spalten in TEXT oder BLOB kann helfen." Es sagt nicht einmal, welche Spalten nicht funktionieren. –