Hibernate Annotation O/RM 映射异常

来源:互联网 发布:人工智能技术的先进性 编辑:程序博客网 时间:2024/06/10 00:41

Hibernate Annotation O/RM 映射异常

两个异常:java.lang.NoClassDefFoundError: javax/persistence/Cacheablejava.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
之所以将他们放在一起说是有原因的,同时此文也算是对该问题的一个总结。


先说第一个异常 java.lang.NoClassDefFoundError: javax/persistence/Cacheable.
其实原因也很明显,说没有找到该类的引用,因为CacheableJava Persistence API 2.0中被规范的一个接口。

解决办法:添加hibernate-jpa-2.0-api-1.0.0.Final.jar

在说第二个异常java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z.
此问题出现在使用注解进行一对多的O/R映射,大部分网友的说法是因为javaee.jar中的部分类与hibernate-jpa-2.0-api-1.0.0.Final.jar存在版本冲突导致的,解决的办法是从Build Path中移除对javaEE的引用。

但事实上不止于此,因为笔者在不存在javaee.jar的普通Java Project中也出现了这个问题。而且如果在web项目中移除javaEE也是不易接受的。
解决办法:移除hibernate-distribution-3.5+的引用,改用较稳定的版本,例如:hibernate- distribution-3.3.2.GA-dist。并且在诸如3.3.2等版本下使用Annotation进行O/R映射是不需要引入jpa2.0 API。因此,自然不会出现第一个异常。

总结:具体冲突原因尚不清楚,疑是Bug。所以使用一个较为折中的办法,既不会影响web程序,又不影响Annotation的使用。

 

原创粉丝点击