2010-01-21 7 views
7

In meiner Webanwendung habe ich einen Textbereich, dessen vom Benutzer gefüllte Inhalte letztlich mit Hibernate in der db gespeichert werden. Ich bin auf ein Problem gestoßen, dass, wenn die Benutzereingabe über eine bestimmte Länge hinausgeht, die Persistenz fehlschlägt. Gibt es eine Möglichkeit, über Hibernate-Annotationen oder in der Konfiguration anzugeben, dass dieses bestimmte Feld längere Zeichenfolgen unterstützen soll und dass der Datenbank-Spaltentyp dies widerspiegeln sollte?Behalten Sie lange Zeichenketten mit Hibernate aus

Hier ist die Ausnahme, die ich bekomme:

@Column(length=1000) 

oder Sie können den Spaltentyp zu so etwas wie ändern:

Caused by: java.sql.BatchUpdateException: Data truncation: Data too long for column 'introText' at row 1 
    at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2007) 
    at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1443) 
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) 
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268) 
    ... 41 more 
+0

warum sagen Sie es nicht? schneidet es die Zeichenfolge im Hintergrund still oder erhalten Sie eine Fehlermeldung? Wenn Sie Hibernate mitteilen, dass es sich um einen String-Typ handelt, wird versucht, alles zu speichern. –

+0

Der Benutzerinhalt wird in einem String-Objekt festgelegt. Während der Persistenz wird eine Ausnahme ausgelöst. – lupefiasco

+0

Könnten Sie die Ausnahme in Ihren Post setzen? :) und vielleicht das Snippet von deinem aktuellen Mapping. –

Antwort

20

Sie den Längenparameter auf die Anmerkung, wie so verwenden könnte Text, wenn Ihre Datenbank dies unterstützt, wie folgt:

Wenn Sie hbm2ddl aktualisieren verwenden und die Spalte wird erstellt, um stattdessen diesen Typ zu verwenden (datenbankspezifisch).

+2

nur um zu ergänzen, hier musste die Länge ein int sein, und daher @Column (length = 1000) – Thomas

+1

Für unser Projekt möchten wir, dass die psql-Datenbank den VARCHAR-Typ für einige Spalten ohne eine bestimmte Größe verwendet. Dazu verwenden wir: @Column (columnDefinition = "VARCHAR") – mahler

+0

Zumal in PostgreSQL "varchar" dasselbe ist wie "text". http://stackoverflow.com/questions/4848964/postgresql-difference-between-text-and-varchar-character-varying – tgharold

0

ok das ist eigentlich ein DB Fehler.

Überprüfen Sie die IntroText Spalte in Ihrem DB und es ist wahrscheinlich ein Varchar, das nur in der Größe begrenzt ist. Sie müssen den Speichertyp auf etwas Größeres ändern, damit der Text nicht abgeschnitten wird.

Wenn Sie denken, dass es nicht ist, müssen Sie Ihr Mapping und Schema zeigen.

5

Ich hatte ein ähnliches Problem, das ich durch die Zuordnung der Hibernate „text“ Typ der Eigenschaft gelöst:

@Type(type="text") 
Verwandte Themen