使用Hibernate Validator中碰到的一些问题

时间:2023-01-21 19:07:41
最近,看了一下Hibernate Validator 4.x,为了练练手,于是想对一个以前练习的小项目把Hibernate Validator使用进去,开始碰到一些问题,一直没解决。今天空下来再尝试了一下,顺便总结一下。

原工程用Hibernate 3.3.1 + Spring 3.02 + Spring MVC实现。

使用Hibernate Validator版本:4.2
http://hibernate.org/subprojects/validator.html

这里采用注解方式

第一步,改注解
如:
@Entity
@Table(name = "tour_calendar")
public class TourCalendar extends AbstractEntity {
@NotNull
@Size(max = 10)
private String title;

// 省略其他属性和setter、getter

}

使用hibernate.hbm2ddl.auto的create功能,发现产生title字段属性为默认属性,并没有not null修饰。
开始猜想是不是数据库问题,换了MySQL和Oracle都是这个问题。
仔细看了一下Hibernate Validator的文档,没发现什么有用的信息。
所有的过程都没有报错,而这些Annotation又没有起作用,于是猜想是不是hibernate版本问题。
下了最新版本的hibernate 3.6 final。解压后发现新版本的hibernate3.jar与3.3的区别:hibernate-annotation和hiberante-annotaion-common已经包含在其中。
删除了hibernate3.3的相关包,将3.6以及相关包放入。

运行出现第二个问题:
Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z

原因:hibernate-jpa-2.0-api-1.0.0.Final和ejb3-persistence产生冲突。
解决:删除ejb3-persistence包

再次运行,Hibernate Validator正常工作。