开发者

How map a bit type in Mysql to hibernate?

i use the reverse engeneering in my class and get this:

@Entity
@Table(name = "user", catalog = "bytecode", uniqueConstraints =
@UniqueConstraint(columnNames = "email"))
public class User implements java.io.Serializable {

    private Integer id;
    private String email;
    private String password;
    private boolean type;
开发者_如何学C

Database:

CREATE TABLE  `bytecode`.`user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `type` bit(1) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

But i don't want to set 'true' or 'false' in my attribute 'type' but 1 or 0. How can i do that in hibernate ?

Best regards, Valter Henrique.


Hibernate has a special numeric_boolean type for this kind of mapping. You can configure it as follows:

@Type(type = "numeric_boolean")
private boolean type;  

See also:

  • 6.1.1. Basic value types


I had a similar problem. The following mapping in Java solved my problem:

@Column(name = "columnName", columnDefinition="BIT")
private Boolean columnVariable;


Do you have to have it as a bit type in MySQL? The easiest solution would be to change the data type in MySQL to tinyint(1).

Otherwise you should be able to map your entity type to an integer using annotations; Not sure about this, have to look it up

...
@Column(nullable=false)
@Type(type="org.hibernate.type.BooleanType")
private short type;


http://bugs.mysql.com/bug.php?id=28422 suggests it is a bug. http://www.xaprb.com/blog/2006/04/11/bit-values-in-mysql/ suggests it would be wise to skip it. But of course you can't tell the DBA to not use a bit column in MySQL - meaning either we need to use and older version of MySQL (< 5.0.3) or not use MySQL's bit + Hibernate at all.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜