在分享之前先给大家看两个异常,应该说这一类的异常还是很常见的,主要原因是jar包冲突
异常1:
java.lang.NoSuchFieldError: INSTANCE
at org.hibernate.type.BasicTypeRegistry.
(BasicTypeRegistry.java:94)
at org.hibernate.type.TypeResolver.
(TypeResolver.java:59) at org.hibernate.cfg.Configuration.
(Configuration.java:250) at org.hibernate.cfg.Configuration.
(Configuration.java:302) at org.hibernate.cfg.AnnotationConfiguration.
(AnnotationConfiguration.java:108) at org.hibernate.ejb.Ejb3Configuration.
(Ejb3Configuration.java:107) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:124) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34) at org.lxh.util.JpaUtil.
(JpaUtil.java:10) at org.lxh.test.Test.testInsert(Test.java:20) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
这个异常主要出现在hibernate3.6或更高版本,解决办法是删除hibernate-annotations.jar和hibernate-commons-annotations.jar
因为hibernate3.6包里已经包含以上两包了
异常2:
Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1912)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4035)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3989)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1398)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1375)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:188)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
... 65 more
该异常也是jar包冲突导致,主要还是出现在hibernate3.6或更高版本,解决办法是删除ejb3-persistence.jar
一 一对多关联关系
异常的问题说了,下面进入正题,昨天研究了jpa的基本使用,这次分享下jpa的一对多和一对一关联关系,这一部分也和hibernate大体类似,只是在配置上稍有差异。一对多是很常见的关联关系,在jpa中一对多关联关系由多的一方维护,下面以员工和部门为例来表现一对多的这种关系
1. 部门的员工的实体类
package org.lxh.info;
import java.util.*;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import java