java– 在JUnit测试中使用Transaction注释时,数据不会保存在DB中

java– 在JUnit测试中使用Transaction注释时,数据不会保存在DB中,第1张

概述同事们,我无法解决春季交易超过一周的问题.我创建了非常相似的帖子(Why data wasn't saved when I use @Transactional annotation?),但无法解决其中的问题;当然我考虑了给@Florian Schaetz的建议.我请你帮助我.所以,我有测试类:@RunWith(SpringJUnit4ClassRunner

同事们,我无法解决春季交易超过一周的问题.
我创建了非常相似的帖子(Why data wasn’t saved when I use @Transactional annotation?),但无法解决其中的问题;当然我考虑了给@Florian Schaetz的建议.我请你帮助我.

所以,我有测试类:

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes = AppConfig.class,loader = AnnotationConfigContextLoader.class)@Transactionalpublic class OdValuesServiceTest {    static final Logger LOG = Logger.getLogger(OdValuesServiceTest.class.getname());    @autowired    OdValuesService odValuesService;    @autowired    DBCommonsService dbCommonsService;    @Transactional ("txManagerDU")    @Test    @Commit    public voID addOdValue() throws Exception {                OdValuesEntity odValuesEntity = new OdValuesEntity();                odValuesEntity.setID(dbCommonsService.getNextDocOD("OD_VALUES_ID_GEN"));                odValuesEntity.setSysname("name" + DataGenerator.getRandomISIN());                odValuesEntity.setname("name");                odValuesEntity.setIsIn((short) 1);                odValuesEntity.setvType(2);                odValuesEntity.setMfu((short) 0);                odValuesEntity.setIsin("AU000A0JP922");                odValuesEntity.setCfi("");                odValuesService.addOdValue(odValuesEntity);    }}

接口类addOdValue如下所示:

public interface OdValuesDAO {    public voID addOdValue (OdValuesEntity odValuesEntity);}

而DAO实现类是:

@Componentpublic class OdValuesDAOImpl implemets OdValuesDAO  {    static final Logger LOG = Logger.getLogger(OdValuesDAO.class.getname());    @autowired    @QualifIEr("emDU")    private EntityManager em;    public voID addOdValue (OdValuesEntity odValuesEntity) {        LOG.info(odValuesEntity.toString());        LOG.info("Transaction is active:" + em.getTransaction().isActive());        //em.getTransaction().begin();        em.persist(odValuesEntity);        //em.getTransaction().commit();    }}

Spring上下文,作为配置文件,是:

@Configuration@EnableTransactionManagement@ComponentScanpublic class AppConfig {static final Logger LOG = Logger.getLogger(AppConfig.class.getname());/*There are some beans to work with propertIEs file*/    @Bean    public BasicdataSource primaryDuDataSource() {        BasicdataSource primaryDuDataSource = new BasicdataSource();        primaryDuDataSource.setDriverClassname("org.firebirdsql.jdbc.FBDriver");        primaryDuDataSource.setUrl(primaryDuDbUrl);        primaryDuDataSource.setUsername(primaryDuDbUser);        primaryDuDataSource.setPassword(primaryDuDbPassword);        primaryDuDataSource.setMaxIDle(30);        primaryDuDataSource.setMaxWaitMillis(10000);        primaryDuDataSource.setValIDationquery("select 1 from rdb$database");        primaryDuDataSource.setTestOnBorrow(false);        primaryDuDataSource.setTestWhileIDle(true);        primaryDuDataSource.setDefaultautoCommit(true);        return primaryDuDataSource;    }    @Bean    public BasicdataSource secondaryDataSource() {        BasicdataSource secondaryDataSource = new BasicdataSource();        secondaryDataSource.setDriverClassname("com.microsoft.sqlserver.jdbc.sqlServerDriver");        secondaryDataSource.setUrl(scndsysDbUrl);        secondaryDataSource.setUsername(scndsysDbUser);        secondaryDataSource.setPassword(scndsysDbPassword);        secondaryDataSource.setMaxIDle(2);        secondaryDataSource.setMaxWaitMillis(10000);        secondaryDataSource.setValIDationquery("select 1");        secondaryDataSource.setTestOnBorrow(true);        secondaryDataSource.setTestWhileIDle(true);        secondaryDataSource.setDefaultautoCommit(true);        return secondaryDataSource;    }    @Bean    public  LocalContainerEntityManagerfactorybean entityManagerFactory (@QualifIEr("secondaryDataSource") BasicdataSource secondaryDataSource) {        LocalContainerEntityManagerfactorybean localConnectionfactorybean = new LocalContainerEntityManagerfactorybean();        localConnectionfactorybean.setPersistenceXmlLocation("classpath:meta-inf/persistence.xml");        localConnectionfactorybean.setDataSource(secondaryDataSource);        localConnectionfactorybean.setJpavendorAdapter(new HibernateJpavendorAdapter());        return localConnectionfactorybean;    }    @Bean    public LocalContainerEntityManagerfactorybean entityManagerFactoryprmsys (@QualifIEr("primaryDuDataSource")BasicdataSource primaryDuDataSource) {        LocalContainerEntityManagerfactorybean emf = new LocalContainerEntityManagerfactorybean();        emf.setPersistenceXmlLocation("classpath:meta-inf/persistence.xml");        emf.setDataSource(primaryDuDataSource);        Map

Stacktrace是:

>     "C:\Program files\Java\jdk1.8.0_77\bin\java" -ea>     -DIDea.launcher.port=7537 "-DIDea.launcher.bin.path=C:\Program files (x86)\JetBrains\IntelliJ IDEA 2016.1.3\bin">     -DIDea.junit.sm_runner>     -Dfile.enCoding=UTF-8 -classpath "jars">     com.intellij.rt.execution.application.AppMain>     com.intellij.rt.execution.junit.JUnitStarter -IDeVersion5>     au.acap.app.JpaEntitIEs.Service.OdValuesServiceTest,addOdValue>     log4j:WARN Continuable parsing error 86 and column 23 log4j:WARN The>     content of element type "log4j:configuration" must match>     "(renderer*,throwableRenderer?,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)". INFO : [sep-16 15:08:48,172]>     context.support.DefaultTestContextbootstrapper - Loaded default>     TestExecutionListener class names from location>     [meta-inf/spring.factorIEs]:>     [org.springframework.test.context.web.ServletTestExecutionListener,>     org.springframework.test.context.support.DirtIEsContextBeforeModesTestExecutionListener,>     org.springframework.test.context.support.DependencyInjectionTestExecutionListener,>     org.springframework.test.context.support.DirtIEsContextTestExecutionListener,>     org.springframework.test.context.transaction.TransactionalTestExecutionListener,>     org.springframework.test.context.jdbc.sqlScriptsTestExecutionListener]>     INFO : [sep-16 15:08:48,213]>     context.support.DefaultTestContextbootstrapper - Could not instantiate>     TestExecutionListener>     [org.springframework.test.context.web.ServletTestExecutionListener].>     Specify custom Listener classes or make the default Listener classes>     (and their required dependencIEs) available. Offending class:>     [org/springframework/web/context/request/RequestAttributes] INFO :>     [sep-16 15:08:48,215] context.support.DefaultTestContextbootstrapper ->     Using TestExecutionListeners:>     [org.springframework.test.context.support.DirtIEsContextBeforeModesTestExecutionListener@67784306,>     org.springframework.test.context.support.DependencyInjectionTestExecutionListener@335eadca,>     org.springframework.test.context.support.DirtIEsContextTestExecutionListener@210366b4,>     org.springframework.test.context.transaction.TransactionalTestExecutionListener@eec5a4a,>     org.springframework.test.context.jdbc.sqlScriptsTestExecutionListener@2b2948e2]INFO>     : [sep-16 15:08:48,402] context.support.GenericApplicationContext ->     Refreshing>     org.springframework.context.support.GenericApplicationContext@3712b94:>     startup date [Fri Sep 16 15:08:48 MSK 2016]; root of context hIErarchy>     INFO : [sep-16 15:08:48,956] app.Commons.QortCommons - StartDate:>         24.06.2016 00:00:00 INFO : [sep-16 15:08:48,958] app.Commons.QortCommons - EndDate: 11.08.2016 23:59:59 INFO : [sep-16>     15:08:48,970] acap.app.AppConfig -  mainClassLocation:>     /C:/Users/maya/documents/GIT/qort-integration/prmsys/target/classes/>     INFO : [sep-16 15:08:48,971] acap.app.AppConfig - PropertIEs will read>     from:>     /C:/Users/maya/documents/GIT/qort-integration/prmsys/target/classes/application.propertIEs>     INFO : [sep-16 15:08:49,238]>     orm.jpa.LocalContainerEntityManagerfactorybean - Building JPA>     container EntityManagerFactory for persistence unit 'PersistenceUnit'>     INFO : [sep-16 15:08:50,587]>     orm.jpa.LocalContainerEntityManagerfactorybean - Building JPA>     container EntityManagerFactory for persistence unit 'PersistenceUnit'>     Hibernate: create table HT_OD_A_SHARES (SHARE integer not null,>     hib_sess_ID CHAR(36)) Hibernate: create table HT_OD_DolS (ID integer>     not null,hib_sess_ID CHAR(36)) Hibernate: create table HT_OD_VALUES>     (ID integer not null,hib_sess_ID CHAR(36)) .... INFO : [sep-16>     15:08:52,350] java.sql.DatabaseMetaData - HHH000262: table not found:>     ...... ERROR: [sep-16 15:08:52,442] tool.hbm2ddl.SchemaUpdate ->     HHH000388: Unsuccessful: create table ..... ERROR: [sep-16>     15:08:52,444] tool.hbm2ddl.SchemaUpdate - GDS Exception. 335544569.>     Dynamic sql Error sql error code = -104 Token unkNown - line 1,column>     17 . ERROR: [sep-16 15:08:52,449] tool.hbm2ddl.SchemaUpdate ->     HHH000388: Unsuccessful: create table .....>     INFO : [sep-16 15:08:52,741] context.transaction.TransactionContext - Began transaction (1) for>     test context [DefaultTestContext@222afc67 testClass =>     OdValuesServiceTest,testInstance =>     au.acap.app.JpaEntitIEs.Service.OdValuesServiceTest@4c2fb9dd,>     testMethod = addOdValue@OdValuesServiceTest,testException = [null],>     mergedContextConfiguration = [MergedContextConfiguration@58cf8f94>     testClass = OdValuesServiceTest,locations = '{}',classes = '{class>     au.acap.app.AppConfig}',contextinitializerClasses = '[]',>     activeProfiles = '{}',propertySourceLocations = '{}',>     propertySourcePropertIEs = '{}',contextLoader =>     'org.springframework.test.context.support.AnnotationConfigContextLoader',>     parent = [null]]]; transaction manager>     [org.springframework.orm.jpa.JpaTransactionManager@54f4a7f0]; rollback>     [false] Hibernate: select gen_ID(OD_VALUES_ID_GEN,1) as DOC_ID from>     rdb$database INFO : [sep-16 15:08:52,872]>     JpaEntitIEs.Service.DBCommonsService - docID = 10465 INFO : [sep-16>     15:08:52,931] app.DAO.OdValuesDAO ->     au.acap.app.JpaEntitIEs.OdValuesEntity@70c0a3d5[   ID=10465  >     sysname=nameJP3228600007   name=name   vType=2   isin=AU000A0JP922  >     mfu=0   isIn=1   cfi= ] INFO : [sep-16 15:08:52,933]>     app.DAO.OdValuesDAO - Transaction is active:false Hibernate: insert>     into OD_VALUES (B_DATE,BASE_VAL,CFI,IS_IN,ISIN,MFU,name,>     SYSname,V_TYPE,ID) values (?,?,?) INFO :>     [sep-16 15:08:53,004] context.transaction.TransactionContext ->     Committed transaction for test context [DefaultTestContext@222afc67>     testClass = OdValuesServiceTest,>     parent = [null]]]. INFO : [sep-16 15:08:53,007]>     context.support.GenericApplicationContext - Closing>     org.springframework.context.support.GenericApplicationContext@3712b94:>     startup date [Fri Sep 16 15:08:48 MSK 2016]; root of context hIErarchy>     INFO : [sep-16 15:08:53,013]>     orm.jpa.LocalContainerEntityManagerfactorybean - Closing JPA>     EntityManagerFactory for persistence unit 'PersistenceUnit' INFO :>     [sep-16 15:08:53,030] orm.jpa.LocalContainerEntityManagerfactorybean ->     Closing JPA EntityManagerFactory for persistence unit 'PersistenceUnit'>     Process finished with exit code 0

问题是交易没有提交.请帮我在测试期间将数据保存在DB中.谢谢.

更新:
还需要帮助!

我的进口可能有问题吗?

import org.springframework.batch.item.database.JdbcCursorItemReader;import org.springframework.beans.factory.annotation.QualifIEr;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;import org.springframework.orm.jpa.JpaTransactionManager;import org.springframework.orm.jpa.LocalContainerEntityManagerfactorybean;import org.springframework.orm.jpa.vendor.HibernateJpavendorAdapter;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;
最佳答案来自@Commit文档:

Warning: @Commit can be used as direct
replacement for @Rollback(false); however,it should
not be declared alongsIDe @Rollback. Declaring
@Commit and @Rollback on the same test method or on the
same test class is unsupported and may lead to unpredictable results.”

所以混合@Commit和@Rollback是一个坏主意.

另一个是具有不同配置的类/方法@Transactional标签(但我不确定这是否是这里的问题.)

总结

以上是内存溢出为你收集整理的java – 在JUnit测试中使用Transaction注释时,数据不会保存在DB中全部内容,希望文章能够帮你解决java – 在JUnit测试中使用Transaction注释时,数据不会保存在DB中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1258380.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)