代码之家  ›  专栏  ›  技术社区  ›  Derek Mahar

为什么Hibernate抛出异常“java.lang.nosuchMethodError:javax.persistence.uniqueConstraint.name()”?

  •  3
  • Derek Mahar  · 技术社区  · 14 年前

    为什么 UniqueConstraint 以下Hibernate映射声明中的注释导致异常 java.lang.NoSuchMethodError: javax.persistence.UniqueConstraint.name() (堆栈跟踪见下文)?注意,当我移除 唯一约束 注释,Hibernate不会引发异常,Spring会成功创建应用程序上下文。

    源代码:

    @Entity
    @Table(name="TB_USER_ACCESS"
        ,schema="ABSOL_USER"
        , uniqueConstraints = @UniqueConstraint(columnNames={"USER_ID", "BUSINESS_GROUP_ID", "BUSINESS_FUNCTION_ID"}) 
    )
    public class UserAccess  implements java.io.Serializable {
    ...
    

    异常堆栈跟踪:

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.UniqueConstraint.name()Ljava/lang/String;
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
        at com.db.abstrack.util.SpringContextFactory.<init>(SpringContextFactory.java:18)
        at com.db.abstrack.util.SpringContextFactory.<clinit>(SpringContextFactory.java:13)
        ... 60 more
    Caused by: java.lang.NoSuchMethodError: javax.persistence.UniqueConstraint.name()Ljava/lang/String;
        at org.hibernate.cfg.annotations.TableBinder.buildUniqueConstraintHolders(TableBinder.java:544)
        at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:550)
        at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:636)
        at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:359)
        at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1206)
        at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
        at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
        ... 73 more
    

    软件配置:

    • 休眠3.5.5-最终
    • 弹簧3.0.4.释放
    • WebLogic服务器10.3.2

    相关maven 2依赖于 pom.xml :

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.5.5-Final</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>3.0.4.RELEASE</version>
        <scope>compile</scope>
    </dependency>
    

    休眠依赖项:

    [INFO] +- org.hibernate:hibernate-entitymanager:jar:3.5.5-Final:compile
    [INFO] |  +- org.hibernate:hibernate-core:jar:3.5.5-Final:compile
    [INFO] |  |  +- antlr:antlr:jar:2.7.6:compile
    [INFO] |  |  +- dom4j:dom4j:jar:1.6.1:compile
    [INFO] |  |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
    [INFO] |  |  \- javax.transaction:jta:jar:1.1:compile
    [INFO] |  +- org.hibernate:hibernate-annotations:jar:3.5.5-Final:compile
    [INFO] |  |  \- org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compile
    [INFO] |  +- cglib:cglib:jar:2.2:compile
    [INFO] |  |  \- asm:asm:jar:3.1:compile
    [INFO] |  \- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.0.Final:compile
    

    弹簧相关性:

    [INFO] +- org.springframework:spring-orm:jar:3.0.4.RELEASE:compile
    [INFO] |  +- org.springframework:spring-beans:jar:3.0.4.RELEASE:compile
    [INFO] |  +- org.springframework:spring-core:jar:3.0.4.RELEASE:compile
    [INFO] |  |  \- org.springframework:spring-asm:jar:3.0.4.RELEASE:compile
    [INFO] |  +- org.springframework:spring-jdbc:jar:3.0.4.RELEASE:compile
    [INFO] |  \- org.springframework:spring-tx:jar:3.0.4.RELEASE:compile
    [INFO] |     +- aopalliance:aopalliance:jar:1.0:compile
    [INFO] |     +- org.springframework:spring-aop:jar:3.0.4.RELEASE:compile
    [INFO] |     \- org.springframework:spring-context:jar:3.0.4.RELEASE:compile
    [INFO] |        \- org.springframework:spring-expression:jar:3.0.4.RELEASE:compile
    [INFO] +- net.sf.ehcache:ehcache-core:jar:2.2.0:compile
    
    1 回复  |  直到 14 年前
        1
  •  3
  •   Bozho    14 年前

    UniqueConstraint.name() 出现在JPA 2中。既然你有适当的JPA依赖关系,我假设你 WebLogic JPA1.0是否已发货,它将覆盖JAR。我想你可以在你的 weblogic-application.xml (如所指出的) here ):

    <prefer-application-packages>
      <package-name>javax.persistence.*</package-name>
    </prefer-application-packages>