本文将为您提供关于在提交中途使用AbstractTransactionalJUnit4SpringContextTests的详细介绍,同时,我们还将为您提供关于c#将DbContextTransact
本文将为您提供关于在提交中途使用AbstractTransactionalJUnit4SpringContextTests的详细介绍,同时,我们还将为您提供关于c#将DbContextTransaction转换为SqlTransaction、ios – SKPaymentTransaction的originalTransaction.transactionReceipt为非易耗品还原、iOS:SKPaymentTransactionStateRestored originalTransaction == nil、java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout的实用信息。
本文目录一览:- 在提交中途使用AbstractTransactionalJUnit4SpringContextTests
- c#将DbContextTransaction转换为SqlTransaction
- ios – SKPaymentTransaction的originalTransaction.transactionReceipt为非易耗品还原
- iOS:SKPaymentTransactionStateRestored originalTransaction == nil
- java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout
在提交中途使用AbstractTransactionalJUnit4SpringContextTests
我们想要一个运行多个线程的简单单元测试-这个想法是主线程将保存提交到数据库,然后等待辅助线程将其拾取。
我们发现必须为第二个线程提交事务才能查询数据库并找到项目。否则,它将不存在。
我们正在尝试使用H2数据库,由Hibernate管理访问以及单元测试扩展来完成此任务AbstractTransactionalJUnit4SpringContextTests
。
当我们尝试commit()
现有交易时:
... // Create and save our model objectsessionFactory.getCurrentSession().getTransaction().commit();sessionFactory.getCurrentSession().beginTransaction();... // Create and start second Thread, query, etc.
我们收到错误:
org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: Transaction not successfully started at org.springframework.orm.hibernate4.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:484) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723) at org.springframework.test.context.transaction.TransactionalTestExecutionListener$TransactionContext.endTransaction(TransactionalTestExecutionListener.java:521)`
但是,当我们尝试仅扩展AbstractJUnit4SpringContextTests
并使用@Transactional
注释时:
@TransactionConfiguration(defaultRollback=false, transactionManager="transactionManager")@Transactional()public class DatabaseIntegrityTest extends AbstractJUnit4SpringContextTests {
使用上面相同的提交代码,我们将收到:
org.hibernate.HibernateException: No Session found for current thread at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97) at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1041)
在我们第一次致电时getCurrentSession()
。
有没有办法在JUnit事务性Spring测试中进行提交?
此外,当我们尝试使用创建嵌套事务时AbstractTransactionalJUnit4SpringContextTests
,我们收到:
org.hibernate.TransactionException: nested transactions not supported at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:152) at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1396)
用答案编辑:
多亏了axtavt
,我得以通过以下方式解决问题:
1)扩展 AbstractJUnit4SpringContextTests
2)将@Autowired用于PlatformTransactionManager
:
@Autowired protected PlatformTransactionManager transactionManager;
3)将我的交易代码放入其中:
TransactionStatus status = transactionManager.getTransaction(null);... // The Model-Saving CodetransactionManager.commit(status);
答案1
小编典典因此,您需要在测试方法内创建多个事务。如您所见,您不能使用AbstractTransactionalJUnit4SpringContextTests
,因为它会为整个测试方法创建一个事务,而不能使用nudeAbstractJUnit4SpringContextTests
,因为它根本不会创建任何事务。
解决方案是以AbstractJUnit4SpringContextTests
编程方式在测试方法内部使用和管理事务。
您需要按照11.6程序化交易管理中所述注入PlatformTransactionManager
测试,TransactionTemplate
从测试中创建并使用它来划分事务。
c#将DbContextTransaction转换为SqlTransaction
using (var conn = new sqlConnection("",cred)) { using (var bulkcopy = new sqlBulkcopy("",sqlBulkcopyOptions.CheckConstraints | sqlBulkcopyOptions.KeepNulls,DbContext.Database.CurrentTransaction)) { // bulkcopy code } }
但这里的问题是构造函数的第三个参数应该是sqlTransaction.在我的情况下,我已经有了我的DbContext,它与我的服务交易一起登记.
如何将DbContextTransaction(DbContext.Database.CurrentTransaction)转换为sqlTransaction.
解决方法
的DbContext:
var bulkcopy = new sqlBulkcopy("",sqlBulkcopyOptions.CheckConstraints | sqlBulkcopyOptions.KeepNulls,(myDbContext.Database.CurrentTransaction.UnderlyingTransaction) as sqlTransaction)) ;
IDbTransaction:
using (IDbTransaction tran = conn.BeginTransaction()) { var bulkcopy = new sqlBulkcopy("",tran as sqlTransaction); }
sqlTransaction继承自DbTransaction!
注意:
默认情况下,批量复制操作作为隔离操作执行.批量复制操作以非事务方式发生,没有机会将其回滚.如果在发生错误时需要回滚全部或部分批量复制,则可以使用sqlBulkcopy管理的事务,在现有事务中执行批量复制操作(如在DbContext示例中并将其作为参数传递为可选),或者在IDbTransaction的示例中登记在Transaction中.
ios – SKPaymentTransaction的originalTransaction.transactionReceipt为非易耗品还原
https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/MakingaPurchase/MakingaPurchase.html#//apple_ref/doc/uid/TP40008267-CH3-SW2
有没有人真的得到这个不是零 – 如果是这样,怎么样?
在返回的SKPaymentTransactions中,看起来实际上正确的transactionReceipt在其transactionReceipt属性中(而不是它们的originalTransaction.transactionReceipt属性).
解决方法
这很奇怪,但即使Apple在其文档中声明在originalTransaction中找到了transactionReceipt,我在原始的SKPaymentTransaction类中找到了transactionReceipt.
所以,在选择要传递的事务之前,我已经设置了一点检查:
SKPaymentTransaction *passedTransaction = nil; if (transaction.transactionReceipt) { passedTransaction = transaction; } else if (transaction.originalTransaction.transactionReceipt) { passedTransaction = transaction.originalTransaction; }
iOS:SKPaymentTransactionStateRestored originalTransaction == nil
根据apple docs,我应该收到初始交易的详细信息,在大多数情况下,在沙箱上,这正是发生了什么事情,但是在我们的一些客户的实时应用程序中,我们正在获得原始交易的零价值.
任何人都可以想到为什么我不会收到原来的交易?在[transaction transactionDate]中发回的日期与[[transaction originalTransaction] transactionDate]的预期相同,但是我不知道是否可以安全地假设如果originalTransaction为零,则[transaction transactionDate]将始终为是原始交易的日期.
解决方法
以下是 – (void)restoreTransaction:(SKPaymentTransaction *)事务中替换的代码
if (transaction.originalTransaction.payment.productIdentifier) { [self provideContentForProductIdentifier:transaction.originalTransaction.payment.productIdentifier]; } else { [self provideContentForProductIdentifier:transaction.payment.productIdentifier]; }
java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout
java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:85)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:386)
at com.sun.proxy.$Proxy14.selectOne(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:165)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:82)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy15.countAll(Unknown Source)
at com.study.mybatis.spring.user.daoImpl.UserDaoImpl.countAll(UserDaoImpl.java:19)
at com.study.mybatis.spring.user.serviceImpl.UserServiceImpl.countAll(UserServiceImpl.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
at com.sun.proxy.$Proxy18.countAll(Unknown Source)
at com.study.mybatis.spring.user.test.UserServiceTest.userServiceTest(UserServiceTest.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
spring + mybatis + mybaits-spring版本不匹配。
没有找到具体版本匹配规则,
spring版本:4.3.14.RELEASE
mybatis-spring:1.2.3
mybatis:3.4.5
报上述异常
将mybatis-spring修改为1.3.1问题解决。
今天关于在提交中途使用AbstractTransactionalJUnit4SpringContextTests的分享就到这里,希望大家有所收获,若想了解更多关于c#将DbContextTransaction转换为SqlTransaction、ios – SKPaymentTransaction的originalTransaction.transactionReceipt为非易耗品还原、iOS:SKPaymentTransactionStateRestored originalTransaction == nil、java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout等相关知识,可以在本站进行查询。
本文标签: