Le mappage d'un booléen avec hibernate
Je suis en cours d'exécution des ennuis avec la veille prolongée. J'ai récemment mis mon hbm2ddl pour valider, et il a été se plaindre beaucoup sur les mauvais types de données. J'ai réglé tous les problèmes, sauf pour les booléens.
J'ai un champ opener
dans ma classe, qui est mappé comme:
<property column="opener" name="opener" type="boolean"/>
La colonne opener
est un tinyint (4)
et a une valeur de 1 ou 0. Jusqu'à présent, j'ai essayé de changer les types, mais en vain. J'ai aussi essayé d'utiliser le paramètre suivant dans ma mise en veille prolongée.cfg:
<property name="hibernate.query.substitutions">true 1, false 0</property>
Mais je reçois toujours le même message d'erreur. Ce que je fais mal?
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)
remarque: je n'ai pas accès à la base de données.
OriginalL'auteur Terraego | 2011-05-31
Vous devez vous connecter pour publier un commentaire.
Si vous ne pouvez pas changer votre type SQL dans votre table, je vous recommande de le faire :
et créer votre classe :
vous avez à mettre en œuvre des méthodes de l'interface UserType.
La mise en œuvre transformera octet de type boolean (car un TINYINT est mappé dans l'octet en Java)
voir des exemples ici
bonne chance 🙂
OriginalL'auteur EricParis16
Pour n'importe qui qui a couru dans le même problème que moi, j'ai utilisé une combinaison de deux réponses postées ici.
J'ai mis en place une coutume usertype gérer mon tinyint champ:
Ensuite, j'ai ajouté ce qui suit à mon mappages:
Puis de mon ouvre-terrain j'utilise
type=tinyint_boolean
et il fonctionne comme un charme 🙂Je suis en cours d'exécution hibernate 4.1, ce n'est pas la méthode par défaut de la carte un booléen, mais sa très utilisée. La solution ci-dessus est vraiment moche à mon humble avis, si il regarde dès que je peux, merci!
Donc, en utilisant BasicType avec getRegistrationKeys == ["tinyint_boolean"] serait l'équivalent de la définition de type de cartographie.
de sorte que me sauver du code réutilisable et un fichier xml :)! merci pour la mention de cette!
Nous avons été à l'aide de Jadira Usertype à la carte Jodatime les champs DateTime pour hiberner. Que Jadira Usertype cadre a également un
AbstractUserType
qui prend soin de tous vos code réutilisable.OriginalL'auteur Terraego
Vous pouvez définir votre base de données d'une colonne comme un
char(1)
et dans votre fichier de mapping Hibernate définit la propriété commetype="yes_no"
, qui est un Java de type Booléen. Il apparaîtra en tant queY
etN
valeurs dans la base de données.Si vous souhaitez utiliser
tiny_int
alors la taille devra être de 1, mais je ne suis pas 100% sûr de savoir comment elle est mappée dans le HBM fichier.OriginalL'auteur mut1na
essayez ceci :
en supposant que vous avez un getter
et un setter
si cela ne fonctionne pas, vous devez changer votre TINYINT(4) pour TINYINT(1).
OriginalL'auteur EricParis16
Vous pouvez essayer d'utiliser
numeric_boolean
comme un type:OriginalL'auteur axtavt
C'est une question délicate parce que vous n'avez pas accès à la base de données. Mais il peut être fait avec un peu de travail
Ce que vous devez faire est de créer un type de classe. Cette classe va récupérer la valeur de la base de données (1 ou 0) et il va contenir la logique qui renvoie une valeur true ou false objet Boolean.
Voici un exemple:
http://alenovarini.wikidot.com/mapping-a-custom-type-in-hibernate
votre mapping pour votre nouveau type va ressembler:
Que les classes nullSafeGet méthode retournera votre objet Boolean qui contiennent la valeur true ou false.
de sorte que votre nouveau mappage contiendra:
OriginalL'auteur bsimic