我知道这个问题在这里被问了很多次,但似乎没有一个解决方案对我有效。请原谅我再次问这个问题,因为我对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>这给我提供了以下jars:
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但我不确定我是怎么得到它的。
我对Category - Product关系使用一对一关系。
@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?
发布于 2013-05-13 22:01:07
我认为更好的问题是在类路径中是否有任何不需要的jars,而不是是否缺少任何东西。获得NoSuchMethodError通常意味着您有一个库需要另一个库的特定版本,而它在运行时最终使用的版本不是正确的版本。在您的例子中,我会在您的类路径中查找ejb3-persistence.jar,因为这个错误似乎与OneToOne注释有关。使用hibernate,您应该从hibernate-jpa-2.0-api-1.0.1.Final获得这个文件,但我猜您也有来自另一个jar的OneToOne注释类文件。
而且,似乎其他人已经遇到了类似的问题。看看这是否有帮助:
java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
另外,由于您使用的WebLogic11g是一个JavaEE5服务器,并且与hibernate-jpa-2.0JAR试图使用的JavaEE6不兼容。如果你打算部署到WebLogic11g,你需要找到一个与之兼容的hibernate版本,我不认为4.2.0最终版是。
发布于 2014-07-10 22:21:41
我有相同的pbl,我通过删除persistence-api-1.0.jar & ejb3-persistence.jar并添加javax.persistence-2.0.0.jar解决了这个问题。
https://stackoverflow.com/questions/16523532
复制相似问题