如何将Mysql中的位类型映射到休眠?

Posted

技术标签:

【中文标题】如何将Mysql中的位类型映射到休眠?【英文标题】:How map a bit type in Mysql to hibernate? 【发布时间】:2011-07-30 20:29:10 【问题描述】:

我在课堂上使用逆向工程并得到这个:

@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;

数据库:

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;

但我不想在属性“type”中设置“true”或“false”,而是设置为 1 或 0。 我怎么能在休眠中做到这一点?

最好的问候, 瓦尔特·恩里克。

【问题讨论】:

【参考方案1】:

Hibernate 有一个特殊的numeric_boolean 类型用于这种映射。可以这样配置:

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

另请参阅:

6.1.1. Basic value types

【讨论】:

【参考方案2】:

我遇到了类似的问题。 Java中的以下映射解决了我的问题:

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

【讨论】:

Boolean... 一个危险的包装器:如果未初始化,则定义为 null。在生产环境中抛出异常的一些测试不佳的代码遇到了很多麻烦。【参考方案3】:

mysql 中是否必须将其作为 bit 类型?最简单的解决方案是将 MySQL 中的数据类型更改为 tinyint(1)

否则,您应该能够使用注释将实体类型映射到整数; 这个不太清楚,得查一下

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

【讨论】:

我想在 MySql 中更改它,但不是在 DBA 中,所以我认为我在休眠中更改然后要求更改数据库更好。我会试试你的方法。【参考方案4】:

http://bugs.mysql.com/bug.php?id=28422 表明这是一个错误。 http://www.xaprb.com/blog/2006/04/11/bit-values-in-mysql/ 建议跳过它是明智的。但是当然你不能告诉 DBA 不要在 MySQL 中使用 bit 列——这意味着我们要么需要使用旧版本的 MySQL (

【讨论】:

以上是关于如何将Mysql中的位类型映射到休眠?的主要内容,如果未能解决你的问题,请参考以下文章

什么 Postgres 类型将映射到休眠中 Float 类型的列?

将 tinyint 映射为布尔休眠

将休眠数据类型映射到混合类型存储过程的输出

如何使用类属性映射休眠中的列?

datetimeoffset 休眠映射

如何将休眠查询的结果映射到 DTO 对象?