Die Zuordnung eines boolean mit hibernate
Ich bin mit Probleme mit dem Ruhezustand. Ich habe vor kurzem meine hbm2ddl zu überprüfen, und es wurde, beschweren sich viele über falsche Datentypen. Ich habe die Feste jedes problem außer bei Boolean.
Habe ich ein Feld opener
in meiner Klasse, die ist zugeordnet:
<property column="opener" name="opener" type="boolean"/>
Die Spalte opener
ist ein tinyint (4)
und hat einen Wert von 1 oder 0. Bisher habe ich versucht, die änderung der Art, aber ohne Erfolg. Ich habe auch versucht, mit der folgende Einstellung in meinem Ruhezustand.cfg:
<property name="hibernate.query.substitutions">true 1, false 0</property>
Aber ich bin noch immer der gleiche Fehler. Was mache ich falsch?
org.hibernate.HibernateException: Wrong column type: opener, expected: bit
at org.hibernate.mapping.Table.validateColumns(Table.java:261)
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1083)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:116)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:317)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
Hinweis: ich habe keinen Zugriff auf die Datenbank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht ändern Sie Ihre SQL-Typ in der Tabelle, empfehle ich Ihnen, dies zu tun :
und erstellen Sie Ihre Klasse :
implementieren Sie die Methoden aus dem interface UserType.
Die Umsetzung verwandeln byte boolean (da ein TINYINT ist abgebildet in byte in Java)
sehen Beispiele hier
Glück 🙂
Für jeden, der lief in das gleiche Problem wie ich, ich habe eine Kombination aus zwei Antworten hier gepostet.
Ich habe implementiert eine benutzerdefinierte usertype mit meinem tinyint-Feld:
Dann habe ich noch folgende auf meiner mappings:
Dann in meinem opener-Feld benutze ich
type=tinyint_boolean
und es funktioniert wie ein Charme 🙂AbstractUserType
kümmert sich um alle Ihre boilerplate-code.Definieren Sie Ihre DB-Spalte als
char(1)
- und in deiner Hibernate-mapping-Datei definieren Sie die Eigenschaft alstype="yes_no"
, das ist ein Java-Typ "Boolean". Diese erscheinen alsY
undN
Werte in die DB.Wenn Sie verwenden möchten
tiny_int
dann die Größe haben werden 1, aber ich bin mir nicht 100% sicher, wie das zugeordnet ist, in die HBM-Datei.versuchen Sie dies :
vorausgesetzt, Sie haben eine get -
- und eine setter -
Können Sie versuchen, zu verwenden
numeric_boolean
als Typ:Dies ist eine knifflige Sache, da du keinen Zugriff auf die Datenbank. Aber es kann getan werden, mit ein bisschen Arbeit
Was Sie tun müssen ist, erstellen Sie eine benutzerdefinierte type-Klasse. Diese Klasse wird im wesentlichen um den Wert aus der Datenbank (1 oder 0), und es enthält Logik, die liefert entweder true oder false Boolean-Objekt.
Hier ist ein Beispiel:
http://alenovarini.wikidot.com/mapping-a-custom-type-in-hibernate
dein mapping für den neuen Typ Aussehen wird:
Klassen nullSafeGet Methode zurück Boolean-Objekt, das enthält true oder false.
damit Ihre neue Zuordnung wird enthalten: