Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring 4.03和3.2.6是否改变了@Transactional在服务中的工作方式_Java_Spring_Hibernate - Fatal编程技术网

Java Spring 4.03和3.2.6是否改变了@Transactional在服务中的工作方式

Java Spring 4.03和3.2.6是否改变了@Transactional在服务中的工作方式,java,spring,hibernate,Java,Spring,Hibernate,我们在从3升级到Spring4时遇到了一个问题。我们已经做了一些测试,但还没有得出一个明确的结论。基本上我们看到的是,我们的代码看起来像这样,并没有保存新创建的实体。在升级到Spring4之前,同样的代码也起作用。这似乎很基本,我们肯定遗漏了一些东西,但到目前为止,我们还没有弄清楚为什么我们现在需要添加额外的@Transactional @Transactional SomeWebSerivce { someAutowiredDomainService.doStuff(); } @Serv

我们在从3升级到Spring4时遇到了一个问题。我们已经做了一些测试,但还没有得出一个明确的结论。基本上我们看到的是,我们的代码看起来像这样,并没有保存新创建的实体。在升级到Spring4之前,同样的代码也起作用。这似乎很基本,我们肯定遗漏了一些东西,但到目前为止,我们还没有弄清楚为什么我们现在需要添加额外的@Transactional

@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服务位于同一位置(某些应用程序上下文),如果它们不是事务性的,则它们不是事务性的。此外,还要注意组件扫描,确保不对同一组件进行两次扫描。