Why does Hibernate throw exception "java.lang.NoSuchMethodError: javax.persistence.UniqueConstraint.name()"?
Why does the UniqueConstraint
annotation in the following H开发者_高级运维ibernate mapping declaration cause the exception java.lang.NoSuchMethodError: javax.persistence.UniqueConstraint.name()
(see below for stack trace)? Note that when I remove the UniqueConstraint
annotation, Hibernate does not throw the exception and Spring successfully creates the application context.
Source code:
@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 {
...
Exception stack trace:
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
Software configuration:
- Hibernate 3.5.5-Final
- Spring 3.0.4.RELEASE
- WebLogic Server 10.3.2
Relevant Maven 2 dependencies in 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>
Hibernate dependencies:
[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
Spring dependencies:
[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
UniqueConstraint.name()
appears in JPA 2. Since you have the proper JPA dependencies, I'd assume your WebLogic
has JPA 1.0 shipped, which overrides your jars. I think you can do this in your weblogic-application.xml
(as noted here):
<prefer-application-packages>
<package-name>javax.persistence.*</package-name>
</prefer-application-packages>
精彩评论