相关疑难解决方法(0)

javax.persistence.Table.indexes()中的NoSuchMethodError [Ljavax/persistence/Index

我有一个游戏框架应用程序,我使用Hibernate 4.2.5.Final(这是通过Maven的依赖管理检索).我决定升级到Hibernate 4.3.0.Final,成功重新编译我的应用程序,然后运行它.

我在下面得到了例外,并且无法找出原因.我降级回4.2.5,这个问题没有发生.然后,我尝试在4.2.5之后使用每个Final版本升级Hibernate.也就是说,我从4.2.5.Final到4.2.6.Final,到4.2.7.Final,到4.2.8.Final再到4.3.Final.直到我升级到4.3.0.Final才会出现此问题.

Java版本信息

java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
Run Code Online (Sandbox Code Playgroud)

例外:

play.api.UnexpectedException: Unexpected exception[NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:152) ~[play_2.10.jar:2.2.1]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:112) ~[play_2.10.jar:2.2.1]
    at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:112) ~[play_2.10.jar:2.2.1]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:110) ~[play_2.10.jar:2.2.1]
    at scala.util.Success.flatMap(Try.scala:200) ~[scala-library.jar:na]
Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:936) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:781) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3762) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3716) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
Run Code Online (Sandbox Code Playgroud)

java playframework-2.0 hibernate-4.x

84
推荐指数
6
解决办法
10万
查看次数

Hibernate版本?

我正在使用JBoss Embedded版本beta3.SP10,我正面临一个应该在某些Hibernate版本中修复的持久性错误.遗憾的是,我不知道在我的JBoss Embedded中使用了什么版本的Hibernate,并且无法找到找到这些信息的方法,hibernate-all.jar捆绑在其中的不包含 org.hibernate.Version类,也没有MANIFEST.

如何在不使用的情况下找到当前加载的Hibernate版本org.hibernate.Version

java orm hibernate

13
推荐指数
3
解决办法
3万
查看次数

从JBoss EAP 6.1中排除JPA子系统 - 试图在JBoss EAP 6.1中使用JPA 2.1

我有一个war应用程序,其中包含使用Spring容器打包和引导的JPA 2.1 API和Hibernate 4.3.0.Final(JPA 2.1实现),我想在JBoss EAP 6.1中部署它.

我知道JBoss EAP 6.1符合JPA 2.0所以我决定强迫JBoss在我的应用程序中使用JPA版本和实现

我试图做的是使用jboss-deployment-structure.xml排除JPA子系统,但我发现即使我从standalone.xml注释掉JPA扩展和JPA子系统并将JPA子系统排除在jboss-deployment-中 - structure.xml(也排除org.hibernate模块使用在应用程序中打包的hibernate),没有运行JPA扫描程序(如预期的那样),但任何war类(在我的情况下是Spring容器)中指的是javax.persistence类,API从JBoss模块加载(modules/system/layers/base/javax/persistence/api/main/hibernate-jpa-2.0-1.0.1.Final-redhat-2.jar!)提供的API jar的INSTEAD在战争中提供.所以很明显我在战争应用程序中得到了JBoss提供的API(2.0)及其实现(2.1)不匹配的例外.一个例外是例如,注释javax.persistence.Table的索引相关属性无法识别,因为这是JPA 2.1中的一个附加项,在JPA 2.0中不可用

我可以通过用JPA 2.1替换modules目录中的JPA 2.0 API(并将module.xml指向新的2.1 API jar)解决这个问题,一切正常.但是我认为这不是正确的方法,因为这就像尝试更改所有应用程序的服务器行为一样.

这是有意的JBoss类加载行为,所有规范API类(其中JBoss是实现者)将始终优先考虑所使用的实现,无论我们告诉它使用应用程序内的特定API.我认为制作一个符合规范的特定服务器,然后提供覆盖规范版本本身的方法有些矛盾,但有没有办法可以在我的应用程序中干净地使用API​​和实现?

另一个选择是转移到Wildfly,这是JPA 2.1的实现,但我的问题是在JBoss EAP 6.1中这是否干净利落?

jboss spring hibernate jpa

11
推荐指数
3
解决办法
1万
查看次数

Hibernate 4.3.0.Final和Spring Data JPA 1.4.3.RELEASE

我第一次尝试设置和使用Spring Data.当然,您可能希望使用最新版本(Spring Data JPA 1.4.3.RELEASE和Hibernate 4.3.0.Final).根据在线示例配置后,应用程序引发了异常.

 <dependency>
   <groupId>org.springframework.data</groupId>
   <artifactId>spring-data-jpa</artifactId>
   <version>1.4.3.RELEASE</version>
 </dependency>
 <dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>Hibernate 4.3.0.Final</version>
   <exclusions>
     <exclusion>
       <artifactId>commons-collections</artifactId>
       <groupId>commons-collections</groupId>
     </exclusion>
   </exclusions>
 </dependency>
 <dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-search</artifactId>
   <version>4.4.2.Final</version>
   <exclusions>
     <exclusion>
       <groupId>org.hibernate</groupId>
       <artifactId>hibernate-core</artifactId>
     </exclusion>
   </exclusions>
 </dependency>
Run Code Online (Sandbox Code Playgroud)

这是错误/异常:

 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [test-service-persistance-application-context.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) …
Run Code Online (Sandbox Code Playgroud)

java spring jpa spring-data spring-data-jpa

8
推荐指数
1
解决办法
2万
查看次数

JBoss AS7自动加载JPA

我有一个使用JPA/Hibernate和Google Guice的应用程序.Guice在a中被引导ServletContextListener并且它自己设置了EntityManagerFactory.

该应用程序在Tomcat 7上运行良好,但是当我部署到JBoss AS7时,它失败了,因为JBoss决定在调用my之前自动设置JPA ServletContextListener.

如何让JBoss不自动初始化JPA而是等待我ServletContextListener这样做?

更新

根据詹姆斯提供的链接:

在应用程序部署期间,检测到JPA使用(例如persistence.xml或@ PersistenceContext/Unit注释)并将Hibernate依赖项注入应用程序部署.

https://docs.jboss.org/author/display/AS71/JPA+Reference+Guide#JPAReferenceGuide-Introduction

我需要弄清楚如何禁用这种"自动检测"功能.

更新#2

可以通过将以下属性添加到persistence.xml来禁用JPA的容器管理:

<property name="jboss.as.jpa.managed" value="false" />
Run Code Online (Sandbox Code Playgroud)

根据这个主题,截至2012年2月,此功能仅适用于每晚构建.

hibernate jpa guice jboss7.x

5
推荐指数
1
解决办法
5391
查看次数

在EAP 6.4.0中使用JPA 2.1

到目前为止,我没有成功地搜索了这个问题的解决方案.

我们正在将我们的应用程序迁移到EAP 6.4.0,我们的应用程序依赖于JPA 2.1.但是,JBoss是一个Java EE 6服务器,因此包含模块形式的JPA 2.0.

我尝试将JPA API jar直接包含在我的WEB-INF/lib目录中,认为类加载器比系统中的那个更喜欢这个.

我试图在我的耳朵中包含一个jboss-deployment-structure.xml文件.我在耳朵/ META-INF,ear/war/META-INF和ear/war/WEB-INF下试了一下.

在jboss-deployment-structure.xml文件中,我尝试:排除javax.persistence.api模块使用JPA 2.1创建我自己的模块并向其添加依赖项,排除jpa子系统

我还尝试在位于jboss-eap-6.4.0\modules\system\layers\base\javax\persistence\api\main下的javax.persistence.api module.xml文件中将export属性设置为false.

我尝试从standalone.xml中删除jpa子系统.

所有这些都导致了JPA 2.0 jar的使用.

我让它工作的唯一方法是替换模块目录中的实际jar(jboss-eap-6.4.0\modules\system\layers\base\javax\persistence\api\main).但这不是一个有效的解决方案,因为服务器中的其他应用程序或服务实际上可能需要旧版本的API.

有没有办法正确地做到这一点(没有迁移到另一台服务器,也没有更改代码)?

jboss jpa classpath classloader

5
推荐指数
1
解决办法
3395
查看次数

Jboss AS7 - jboss-deployment-struct.xml 部署错误

当我将 jboss-deployment-struct.xml 添加到我的 .war 中并在 AS7 中部署时,出现以下错误。

Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[2,1]
Message: Unexpected element '{urn:jboss:deployment-structure:1.2}jboss-deployment-structure'
    at org.jboss.staxmapper.XMLMapperImpl.processNested(XMLMapperImpl.java:108) [staxmapper-1.1.0.Final.jar:1.1.0.Final]
    at org.jboss.staxmapper.XMLMapperImpl.parseDocument(XMLMapperImpl.java:69) [staxmapper-1.1.0.Final.jar:1.1.0.Final]
Run Code Online (Sandbox Code Playgroud)

下面附有示例 xml。

    <jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)

有什么原因导致我收到部署错误吗?

jboss7.x

1
推荐指数
1
解决办法
6578
查看次数