我知道这个问题在这里已经被问过很多次了,但是没有一个解决方案似乎对我有用。原谅我再次问这个,因为我对maven和hibernate都不熟悉。
pom.xml中的hibernate依赖
<hibernate.version>4.2.0.Final</hibernate.version>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.version}</version>
</dependency>
这给了我以下的罐子:
hibernate-entitymanager-4.2.0.Final
hibernate-core-4.2.0.Final
hibernate-validator-4.2.0.Final
hibernate-jpa-2.0-api-1.0.1.Final
我也有:
hibernate-commons-annotations-4.0.1.Final
但我不确定我是怎么做到的。
我正在使用一对一关系来实现类别 - 产品关系。
@Entity
@Table(name="Products")
public class Product {
@Id
@Column(name="id")
@GeneratedValue
int productId;
@NotEmpty
@Length(max=50)
@Column(name="name")
String name;
@Column(name="category_id")
int categoryId;
@OneToOne
@ForeignKey(name="categoryId")
private Category category;
// getters and setters
}
编辑:
很明显,Weblogic 11g jpa jar优先于'hibernate-jpa-2.0-api'。我应该回退到使用jpa-1.0的旧版hibernate还是有一种方法可以强制weblogic使用'hibernate-jpa-2.0-api'代替它的jpa jar?
答案 0 :(得分:2)
我认为更好的问题是你的类路径中是否有任何不需要的罐子,而不是你有什么遗漏。获得NoSuchMethodError
通常意味着您有一个库需要另一个库的特定版本,并且它最终在运行时使用的版本不是正确的版本。在您的情况下,我会在您的类路径上查找ejb3-persistence.jar
,因为它似乎与OneToOne
注释有关。 Wih hibernate,你应该从hibernate-jpa-2.0-api-1.0.1.Final
得到这个,但我的猜测是你还有来自另一个jar的OneToOne
注释类文件。
此外,似乎其他人已经遇到过类似的问题。看看这是否有帮助:
java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
此外,由于您似乎使用的是Weblogic 11g,这是一个JavaEE5服务器,并且与JavaEE6不兼容,而这正是hibernate-jpa-2.0 jar试图使用的。如果你要部署到weblogic 11g,你需要找到一个与它兼容的hibernate版本,我不认为4.2.0 Final是。
答案 1 :(得分:1)
我有相同的pbl,我通过删除persistence-api-1.0.jar&amp;来解决它ejb3-persistence.jar并添加javax.persistence-2.0.0.jar。
答案 2 :(得分:1)
我遇到了同样的问题,我不得不破解weblogic。
这就是我的所作所为:
首先编辑启动weblogic服务器(startWebLogic.cmd)的文件,它位于以下路径中:
<强> C:\用户{用户名} \应用程序数据\漫游\ JDeveloper中\ system11.1.2.0.38.60.17 \默认域\ BIN 强> 并在文件的第6行添加此行。 SETLOCAL
@REM Hack JPA begin echo Hack JPA begin set wls_modules=C:\oracle\Middleware\modules set PRE_CLASSPATH=%wls_modules%\javax.persistence_1.0.0.0_2-0-0.jar;%wls_modules%\com.oracle.jpa2support_1.0.0.0_2-0.jar; echo PRE_CLASSPATH=%PRE_CLASSPATH% echo Hack JPA End @REM Hack JPA END
这样就可以覆盖weblogic在JPA中使用的库。
之后,在weblogic控制台中修改JPA提供程序:
通过这种方式,weblogic使用定义了具有正确版本的
版本的新库