Java Spring 4.03和3.2.6是否改变了@Transactional在服务中的工作方式
我们在从3升级到Spring4时遇到了一个问题。我们已经做了一些测试,但还没有得出一个明确的结论。基本上我们看到的是,我们的代码看起来像这样,并没有保存新创建的实体。在升级到Spring4之前,同样的代码也起作用。这似乎很基本,我们肯定遗漏了一些东西,但到目前为止,我们还没有弄清楚为什么我们现在需要添加额外的@TransactionalJava Spring 4.03和3.2.6是否改变了@Transactional在服务中的工作方式,java,spring,hibernate,Java,Spring,Hibernate,我们在从3升级到Spring4时遇到了一个问题。我们已经做了一些测试,但还没有得出一个明确的结论。基本上我们看到的是,我们的代码看起来像这样,并没有保存新创建的实体。在升级到Spring4之前,同样的代码也起作用。这似乎很基本,我们肯定遗漏了一些东西,但到目前为止,我们还没有弄清楚为什么我们现在需要添加额外的@Transactional @Transactional SomeWebSerivce { someAutowiredDomainService.doStuff(); } @Serv
@Transactional
SomeWebSerivce
{
someAutowiredDomainService.doStuff();
}
@Service
SomeAutowiredDomainService
{
doStuff(){
Foo foo = getAttachedEntityFoo();
foo.createChildEntityBarAndAttachToFooThroughOneToOneMapping(); //<-- this is not persisted to the DB, but if we mark SomeAutowiredDomainService with @Transactional everything works correctly.
}
}
@Transactional
一些网站
{
someAutowiredDomainService.doStuff();
}
@服务
一些自动连线服务
{
多斯塔夫(){
Foo-Foo=getAttachedEntityFoo();
foo.createChildEntityBarAndAttachToFooThroughOneToOneMapping();//我想不起这方面有什么变化。很难弄清楚您当前的描述可能有什么问题。hibernate集成中有一些(微小的?)变化,而不是事务方面的变化。请添加一些配置(hibernate/entitymanager)还有getAttacheIdentityFoo
和CreateChildEntityBarAndAttachToFoothoonOneMapping
方法的代码。事务不起作用的事实让我想知道SomeWebService
是否完全正确配置/事务性。@M.Deinum您是正确的,web服务实际上并没有运行在事务中运行。当我调用TransactionSynchronizationManager.isActualTransactionActive()
时,我得到了false返回,因此显然我们在升级过程中弄糟了一些事情。还不确定是什么。您可能有,也可能没有,除了这个imho之外,您不应该拥有您的web服务(或任何与web或适配器相关的内容)事务性,因为服务是正确的tx层。确保
与web服务位于同一位置(某些应用程序上下文),如果它们不是事务性的,则它们不是事务性的。此外,还要注意组件扫描,确保不对同一组件进行两次扫描。