jpa mysql boolean_jpa中boolean型属性映射的问题

JPA_Annotation_Support_Boolean_type

#JPA Annotation注解本身不支持boolean类型,修改部分代码使得此项功能完整

Introduction

JPA Annotation能够自动创建表和字段,大多数类型和关联都能够良好地工作。但是在使用boolean类型的属性时,针对MySQL进行自动生成,将 生成为bit类型且长度为1的Field,然而这根本不能满足要求,甚至都不能正常工作,主要原因是JPA Annotation注解本身不支持boolean类型,因此有必要进行一定的修改来完成此项功能。 方法大体分为两种,第一种是使用Hibernate Annotation进行定义,第二种是使用getter/setter方法在存取时进行转换。

Details

1、添加Hibernate Annotation

@Column

@org.hibernate.annotations.Type(type="yes_no")

public Boolean getTest() {

return this.test;

}

Hibernate 的Type注记能更详细地标记字段的类型,在相应的boolean字段上进行标记后,重新生成表字段,这样就可以看到表中的字段已经变成了长度为1的 char类型了。 则其他部分均无需改动。 此种方法最大的优点就是极其简单,改动代码较少。 然而缺点则是将原本可仅依赖于JPA的代码,增加了对Hibernate Annotation的依赖。

2、使用getter/setter方法 如果想避免方法一中的缺点,则可采用方法二。 方法二是添加一对getter/setter方法,如下:

@Column(columnDefinition="char(1)")

public Boolean getTest() {

if (test == null) return null;

return test == 'Y' ? Boolean.TRUE : Boolean.FALSE;

}

public void setTest(Boolean test) {

if (test == null) {

this.test = null;

} else {

this.test = test == true ? 'Y' : 'N';

}

}

如 此操作的话,就能够在对属性进行存取操作时,转换成对应的数据库字段值。由于操作已经得到很好的封装,因此也不会对外部的代码造成其他的影响,尤其是在系 统中还建有model层的时候,可根据领域模型属性直接定义为boolean类型。 此方法的优点是借助于JPA的实现无关性,可最大限度地跨框架使用。 缺点则是必须划分持久层和领域层的实体,持久导的实体属性使用Character类型,则领域层可直接使用boolean类型。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值