Wie kann Hibernate anzeigen der SQL-Daten vom Typ nvarchar(max)?
Ich habe eine Spalte in meiner SQL-2005-Datenbank, die verwendet werden, um ein varchar(max), aber es wurde geändert, um eine nvarchar(max).
Nun muss ich das update meiner hibernate-mapping-Datei, um die änderung widerzuspiegeln, und das ist, was es verwendete, zu sein:
<element type="text" Spalte="Wert"/>
Wenn ich versuche, um die Anwendung auszuführen, wird die folgende Fehlermeldung angezeigt:
org.hibernate.HibernateException: Falsche Spalte Typ in der [Tabelle] für die Spalte Wert. Gefunden: ntext erwartet: text
Was soll ich in das 'type' - Attribut korrekt anzeigen die Spalte als ein nvarchar(max)?
Habe ich versucht, die Art zu ntext, aber hibernate nicht wusste, was das war. Ich habe versucht, die Art zu string, aber es behandelt string als text geben.
InformationsquelleAutor ampersandre | 2009-07-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was für mich gearbeitet ist, um die tatsächliche definition für die Spalte in einer @Column-annotation:
Danke, es hat bei mir auch!
InformationsquelleAutor Opper
Gefunden, die Antwort auf Tremend Tech-Blog. Sie haben zu schreiben, Ihre eigenen SQLServerDialect Klasse, es sieht wie folgt aus:
Dieser Klasse Karten Hibernate-Typen auf SQL-Typen, so dass die Klasse Karte die nvarchar(max) SQL-Datentyp zu Überwintern ist CLOB Daten geben.
Den getTypeName Methode zurück, "ntext", wenn Hibernate fragt über den Datentyp mit der code-2005 (die sieht aus wie die vom Datentyp nvarchar(max) - Datentyp).
Schließlich, Sie brauchen, um Ihre hibernate-Persistenz-Dialekt zu dieser neuen SQLServerDialect Klasse, die es erlaubt hibernate übersetzen-Datentypen in SQL-Datentypen.
Dies war eine lange Zeit her und ich kann mich nicht genau erinnern, aber registerColumnType() ordnet die SQL-Typen zu Überwintern Arten. $l (L, nicht #1) ist ein matching-Muster, die für die Länge der nvarchar-Spalte. Wenn der nvarchar-Spalte hat eine definierte Länge, es werden zugeordnet dem Typ VARCHAR. Wenn der nvarchar-Spalte hat max Länge, es wird zugeordnet, um die CLOB-Datentyp.
Bitte beachten Sie, dass für sql server 2014 hatte ich entfernen die überschriebene Methode
getTypeName
im code vor!!!!InformationsquelleAutor ampersandre
Kann es behoben werden
@Nationalized
Anmerkung aus dem Ruhezustand, dass Marken einen zeichendatentyp wie eine verstaatlichte Variante (NVARCHAR, NCHAR, NCLOB, etc).
InformationsquelleAutor Artem Ignatiev
Ich denke, es ist
registerColumnType (- Typen.VARCHAR " - Datentyp nvarchar($l)"); //l wie _l_ength, nicht 1.
InformationsquelleAutor