java JUnit重复表映射,异常
我正在尝试使用以下工具对Dao方法进行JUnit测试:java JUnit重复表映射,异常,java,junit,transactions,Java,Junit,Transactions,我正在尝试使用以下工具对Dao方法进行JUnit测试: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "/applicationContext.xml" }) @TransactionConfiguration(transactionManager = "singletable", defaultRollback = false) @Transactional public class Te
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/applicationContext.xml" })
@TransactionConfiguration(transactionManager = "singletable", defaultRollback = false)
@Transactional
public class TestPersonneSingleTableDao {
@Autowired
private IHommeSingleTableDao iHommeDao;
@Autowired
private IFemmeSingleTableDao iFemmeDao;
/**
*
*/
@Test
public void testSavePersonne() {
// crée et enregistre un homme
HommeDo hommeDo = new HommeDo();
hommeDo.setNom("homme1");
hommeDo.setDatenaissance(new Date());
....
...
}
当我尝试运行它时,它会输出我(6次,我有6个测试方法):
févr。20201410:12:56 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
Infos:从类路径资源[applicationContext.XML]加载XMLBean定义
févr。20201410:12:56 PM org.springframework.context.annotation.ClassPathScanningCandidateComponentProviderRegisterDefaultFilters
Infos:JSR-250“javax.annotation.ManagedBean”找到并支持组件扫描
févr。20201410:12:56 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息:刷新org.springframework.context.support。GenericApplicationContext@7c584ba:启动日期[2014年2月25日星期二22:12:56 CET];上下文层次结构的根
févr。20201410:12:56 PM org.springframework.core.io.support.properties加载程序支持加载属性
Infos:从类路径资源[database.properties]加载属性文件
févr。20201410:12:56 PM org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean createNativeEntityManagerFactory
信息:为持久化单元“springmvcapp\u pu\u singletable”构建JPA容器EntityManagerFactory
févr。20201410:12:56 PM org.hibernate.ejb.HibernatePersistence日志折旧
警告:HH015016:遇到不推荐使用的javax.persistence.spi.PersistenceProvider[org.hibernate.ejb.HibernatePersistence];改用[org.hibernate.jpa.HibernatePersistenceProvider]。
févr。20201410:12:56 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
信息:HH000204:正在处理PersistenceUnitInfo[
名称:springmvcapp_pu_singletable
...]
févr。2014年10月25日晚上10:12:56 org.hibernate.dialogue.dialogue
信息:HH000400:使用方言:org.hibernate.dialogue.mysql5innodbdialogue
févr。20201410:12:56 PM org.hibernate.engine.jdbc.internal.LobCreatorBuilder UseContexturationAllobCreation
信息:HH000424:当createClob()方法引发错误时禁用上下文LOB创建:java.lang.reflect.InvocationTargetException
févr。20201410:12:56 PM org.springframework.beans.factory.support.DefaultSingletonBean注册销毁Singleton
信息:在org.springframework.beans.factory.support中销毁单例。DefaultListableBeanFactory@71a67848:定义bean[org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.InternalAutowiredNotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,femmeJoinedJpaDao,femmeSingleTableJpaDao,FemmetalPerClassJPADAO,hommeJoinedJpaDao,HommeSingleTablePerClassJPADAO,ServicePersonneedJPADAO,FemmeSingleTable,ServicePersonneTablePerClass,createController,deleteController,helloController,readController,createControllerREST,readControllerREST,UpdateControl,org.springframework.context.support.PropertySourcesPlaceholderConfigurer#0,DataSourcesSingleTable,entityManagerFactorySingleTable,transactionManagerSingleTable,DataSourcesTablePerClass,entityManagerFactoryTablePerClass,transactionManagerTablePerClass,DataSourcesJoined,entityManagerFactoryJoined,transactionManagerJoined,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttribute资源0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor] ;工厂层次结构的根
févr.25201410:12:56 PM org.springframework.test.context.TestContextManager prepareTestInstance
Grave:允许TestExecutionListener[org.springframework.test.context.web]时捕获异常。ServletTestExecutionListener@6a3af151]准备测试实例[ili.dao]。TestPersonneSingleTableDao@7d5cda11]
java.lang.IllegalStateException:未能加载ApplicationContext
位于org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99)
位于org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:122)
位于org.springframework.test.context.web.ServletTestExecutionListener.SetupRequestContextIfNeeded(ServletTestExecutionListener.java:105)
位于org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:74)
位于org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:312)
位于org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
位于org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
位于org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284)
位于org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
位于org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
位于org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
位于org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
位于org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
访问org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
位于org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
位于org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
位于org.springframework.test.context.junit4.statements.RunAfterTestClass
févr. 25, 2014 10:12:56 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
Infos: Loading XML bean definitions from class path resource [applicationContext.xml]
févr. 25, 2014 10:12:56 PM org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider registerDefaultFilters
Infos: JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning
févr. 25, 2014 10:12:56 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
Infos: Refreshing org.springframework.context.support.GenericApplicationContext@7c584ba: startup date [Tue Feb 25 22:12:56 CET 2014]; root of context hierarchy
févr. 25, 2014 10:12:56 PM org.springframework.core.io.support.PropertiesLoaderSupport loadProperties
Infos: Loading properties file from class path resource [database.properties]
févr. 25, 2014 10:12:56 PM org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean createNativeEntityManagerFactory
Infos: Building JPA container EntityManagerFactory for persistence unit 'springmvcapp_pu_singletable'
févr. 25, 2014 10:12:56 PM org.hibernate.ejb.HibernatePersistence logDeprecation
WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
févr. 25, 2014 10:12:56 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [
name: springmvcapp_pu_singletable
...]
févr. 25, 2014 10:12:56 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
févr. 25, 2014 10:12:56 PM org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation
INFO: HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
févr. 25, 2014 10:12:56 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
Infos: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@71a67848: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,femmeJoinedJpaDao,femmeSingleTableJpaDao,femmeTablePerClassJpaDao,hommeJoinedJpaDao,hommeSingleTableJpaDao,hommeTablePerClassJpaDao,ServicePersonneJoined,ServicePersonneSingleTable,ServicePersonneTablePerClass,createController,deleteController,helloController,readController,createControllerREST,readControllerREST,updateController,org.springframework.context.support.PropertySourcesPlaceholderConfigurer#0,dataSourceSingleTable,entityManagerFactorySingleTable,transactionManagerSingleTable,dataSourceTablePerClass,entityManagerFactoryTablePerClass,transactionManagerTablePerClass,dataSourceJoined,entityManagerFactoryJoined,transactionManagerJoined,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy
févr. 25, 2014 10:12:56 PM org.springframework.test.context.TestContextManager prepareTestInstance
Grave: Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@6a3af151] to prepare test instance [ili.dao.TestPersonneSingleTableDao@7d5cda11]
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99)
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:122)
at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:105)
at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:74)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:312)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactorySingleTable' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: springmvcapp_pu_singletable] Unable to build Hibernate SessionFactory
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1488)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1117)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:922)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:120)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:100)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:248)
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64)
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91)
... 25 more
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: springmvcapp_pu_singletable] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1225)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:119)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:853)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:399)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:150)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:67)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:288)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485)
... 40 more
Caused by: org.hibernate.DuplicateMappingException: Duplicate table mapping femme
at org.hibernate.cfg.Configuration$MappingsImpl.addDenormalizedTable(Configuration.java:2918)
at org.hibernate.cfg.annotations.TableBinder.buildAndFillTable(TableBinder.java:237)
at org.hibernate.cfg.annotations.TableBinder.buildAndFillTable(TableBinder.java:287)
at org.hibernate.cfg.annotations.EntityBinder.bindTable(EntityBinder.java:568)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:659)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3762)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3716)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
... 49 more
@Pojo
@Entity(name = "PersonneSingleTableDo")
@Table(name = "personne")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "sexe", discriminatorType = DiscriminatorType.STRING)
public abstract class PersonneDo {
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "nom")
private String nom;
@Column(name = "datenaissance")
private Date datenaissance;
@ManyToMany
@JoinTable(name = "amis", joinColumns = @JoinColumn(name = "idPersonne"), inverseJoinColumns = @JoinColumn(name = "idAmi"))
private List<PersonneDo> amis;
@ManyToMany
@JoinTable(name = "amis", joinColumns = @JoinColumn(name = "idAmi"), inverseJoinColumns = @JoinColumn(name = "idPersonne"))
private List<PersonneDo> amiDe;
...
getters/setters
...
@Pojo
@Entity(name = "HommeSingleTableDo")
//@Table(name = "personne")
@DiscriminatorValue(value = "homme")
public class HommeDo extends PersonneDo {
}
@Pojo
@Entity(name = "FemmeSingleTableDo")
//@Table(name = "personne")
@DiscriminatorValue(value = "femme")
public class FemmeDo extends PersonneDo {
}