2017-03-16 114 views
2

下面是带有spring事务的示例代码片段。我的问题: - 会使用相同的会话来获取第1行和第2行的实体吗?无交易提取数据

我的理解: - 我相信是的,它会通过Spring的事务来保证现在

@Transactional() 
    public void method1(
    //fetch entity1 from dao with the help of entity manager//line 1 

    // fetch entity2 from dao with the help of entity manager//line 2 

    // now I fetch thru method entity.fetchLazyField()// line 3 
    ) 

如果我删除@Transactional()。我相信只要entity1被提取,session就会被关闭,单独的session将被用于line2。对 ?

在3线(一旦@Transactional被删除),我将能够获取数据或会话关闭异常应该抛出?

我不是粘贴大的XML配置和完整的DAO代码刚刚取得与实体管理器的etity。交易传播属性为Required

+0

我的理解是你的陈述是正确的。 – Snickers3192

回答

1

是否将同一会话用于在line1和line2处获取实体?

是你是对的(假设你是使用PersistenceContextType.EXTENDED

现在,如果我删除@Transactional()。我相信session1将被关闭为 ,因为entity1被提取并且单独的会话将被用于 line2。对 ?

我不这么认为,但检查thisthis

+0

对于第一部分我相信'PersistenceContextType.EXTENDED'更广泛,这意味着实体管理器(内部会话)可以存在多个请求。对于第二点,从链接中可以看出,会议是否会闭幕?从M.Denim的回答看来,喜欢可以有单独的会话(如他提到的会话排水),但没有提到会议何时结束? – emilly