Spring和Hibernate是否支持两个不同的(嵌套或排序)物理事务之间的会话共享?
我知道Spring支持嵌套事务,但它与保存点是相同的物理事务,即嵌套事务在逻辑上是分开的:
来自Spring文档:
PROPAGATION_NESTED使用具有多个保存点的单个物理事务,可以回滚回滚。
因此,我能否获得类似于以下内容的行为:
@Transactional
void invokeOuterTransaction() {
invokeInnerTransaction();
}
@Transactional
void invokeInnerTransaction() {
// here are the same Session as in 'invokeOuterTransaction',
// but this transaction is new PHYSICAL transaction
}发布于 2018-04-05 22:10:19
因此,使用下面的安装程序探索这个问题,我发现Hibernate会话“每个请求”而不是“每个事务”非常有趣。
安装程序: Hibernate 5,Spring 5,PostgreSQL
下面是一个类似java的快速伪代码,简称:
@Controller {
@Inject FirstService fServ;
@Inject SecondService sServ;
@RequestMapping
handleHttpRequest() {
fServ.invokeFirstTransactional();
sServ.invokeSecondTransactional();
}
}
FirstService {
@Transactional
void invokeFirstTransactional() {
// Session object system hashcode = 187000543
// Thread object system hashcode = 167000522
// Transaction_ID in database = 650
}
}
SecondService {
@Transactional
void invokeSecondTransactional() {
// Session object system hashcode = 187000543
// Thread object system hashcode = 167000522
// Transaction_ID in database = 651
}
}正如您所看到的-相同的Hibernate会话,相同的线程,但不同的物理事务!
https://stackoverflow.com/questions/49674633
复制相似问题