【问题标题】:Why does Hibernate throw exception "java.lang.NoSuchMethodError: javax.persistence.UniqueConstraint.name()"?为什么 Hibernate 会抛出异常“java.lang.NoSuchMethodError: javax.persistence.UniqueConstraint.name()”?
【发布时间】:2011-04-06 10:48:23
【问题描述】:

为什么下面的 Hibernate 映射声明中的 UniqueConstraint 注释会导致异常 java.lang.NoSuchMethodError: javax.persistence.UniqueConstraint.name()(参见下面的堆栈跟踪)?请注意,当我删除 UniqueConstraint 注释时,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-Final
  • Spring 3.0.4.RELEASE
  • WebLogic Server 10.3.2

pom.xml 中的相关 Maven 2 依赖项:

<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

【问题讨论】:

    标签: java hibernate jpa hibernate-annotations


    【解决方案1】:

    UniqueConstraint.name() 出现在 JPA 2 中。由于您具有适当的 JPA 依赖项,我假设您的 WebLogic 已发布 JPA 1.0,它会覆盖您的 jar。我认为您可以在您的weblogic-application.xml 中执行此操作(如here 所述):

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

    【讨论】:

    • 我应该把这个文件放在我的项目中的什么位置,以便 Maven 2 将它放在目标 EAR 文件中的META_INF 中?
    • 我在stackoverflow.com/questions/3612610/… 提出了同样的问题。在那里回答以获得更多代表!
    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2021-04-28
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多