最近迷上了JPA,以至于什么东西都要用EJB3的一套外加JPA来做持久层。今天遇到一个小问题,就是怎么在Column注释里面进行check约束。
看了看JPA的Doc,没有发现和check有关的属性,只找到了Column里面有一个columnDefinition,貌似是定义字段的,于是就望文生义,自己先把check约束写上试试:
然后发布到JBoss,报错了:
2010-06-08 17:06:12,047 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] (main) Unsuccessful:
create table LIB_BOOK (
bookId integer not null auto_increment,
available CHECK(available >=0 AND available <= 32) not null, --问题
title varchar(255) not null,
total integer not null,
catalog_catalogId integer not null,
prima ry key (bookId));
少了个数据类型的定义,这下就好说了,改一下columnDefinition就行了:
重新运行下,还是出错了,再次看看报错信息:
create table LIB_BOOK (
bookId integer not null auto_increment,
available SMALLINT CHECK(available >=0 AND available <= 32) not null, --问题
title varchar(255) not null,
total integer not null,
catalog_catalogId integer not null,
primary key (bookId));
还出错了,貌似是not null的原因,干脆把非空约束写到check里面:
发布到JBoss,问题解决了。
其实这个问题用hibernate就简单了,hibernate在org.hibernate.annotations包里面就提供了一个Check注释,用来进行check约束。