读书人

jpa中boolean型属性映射的有关问题

发布时间: 2012-08-29 08:40:14 作者: rapoo

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类型。

1 楼 cwalet 2011-03-09 就是说要设置bit(1)类型就是在实体上使用boolean?ooooooo~ 2 楼 crazyshitou 2011-03-29 不是这个意思,文章讲的是jpa映射bollean类型的操作方法

读书人网 >软件架构设计

热点推荐