2015-04-01 42 views
2

我使用最新的Spring框架4.1.5和Hibernate-Entity-Manager 4.3.8以及Javax。 Persistence-api 1.0.2全部使用JPA 2.1。這個規範依賴於Java EE 7.我注意到,在Resin 4.0.42中,它使用「javaee-16.jar」。問題是我收到以下異常:如何在Resin 4.0.42中加載Java EE 7並且不使用默認的Javaee-16.jar類默認加載

Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes() 
[Ljavax/persistence/Index; 
    at 
    org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:973) 
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:824) 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3845) 


Method javax.persistence.Table.indexes() only exists in Java EE 7  
(Javax.Persistence-api 1.0.2) as a JPA 2.1 spec and NOT in Java EE 6 as a 
JPA 2.0 spec. 

問題是我的代碼基於JPA 2.1。是否有反正我可以classload

<dependency> 
<groupId>javax</groupId> 
<artifactId>javaee-api</artifactId> 
<version>7.0</version> 
</dependency> 

即使樹脂已經classloaded:javaee-16.jar第一次?

回答

1

得到它的工作,我首先加載孩子庫,而不是其他的方式。樹脂正在裝載母親先。我注意到其他人在僅實現JPA 2.0的應用服務器上實現JPA 2.1時遇到了同樣的挑戰。關鍵是每個應用服務器都有自己特定的方式來首先配置子庫(或你的應用的庫)。

在我的情況,在Resin.xml,添加以下:

<class-loader> 
    <servlet-hack/> 
</class-loader> 
+0

您好,我嘗試,但樹脂的琥珀(樹脂的JPA 1.0實現)抱怨'<持久的xm​​lns =「http://xmlns.jcp .org/xml/ns/persistence「>是persistence.xml中的一個意外的頂級標記。這是JPA 2.1的命名空間。你是如何擺脫它的? (樹脂4.0.43) – smallufo 2015-04-07 10:33:22

+0

使用JPA註釋,它應該工作。這個對我有用。 – logixplayer 2015-05-07 04:09:40