【发布时间】:2013-07-25 01:06:16
【问题描述】:
我是 hibernate 4 和 Spring 3.2 的初学者。 我已经阅读了一些关于堆栈的教程和讨论,但我没有找到我的问题的明确答案。我认为最好的理解方式是提问和分享知识!
我们来了! 因此,您每次都创建一个 Pojo、一个 Dao、一个 Service 类,并使用带注释的方法进行事务处理。没关系。我正在使用 Sessionfactory 来处理我的事务。我正在寻找好的做法。
1- 如果您想使用 same 服务中的删除方法和保存方法,您将如何使其在同一事务中工作。当我查看日志时,每个方法都在不同的事务中执行。
这个 SampleServiceImpl:
@Transactional
public void save(Sample sample){
sampleDao.save(sample);
}
@Transactional
public void delete(Sample sample){
sampleDao.delete(sample);
}
// A solution could be that , but not very clean...there should be an another way, no?
@Transactional
public void action(Sample sample){
sampleDao.save(sample);
sampleDao.delete(sample);
}
2- 如果您想使用 不同 服务类中的删除方法和保存方法,您将如何使其在同一个事务中工作。因为每个服务类中的每个方法都由 Transactionnal 注解处理。你创建一个全局服务调用所有子服务在一个方法注释为事务
SampleServiceImpl:
@Transactional
public void save(Sample sample){
sampleDao.save(sample);
}
ParcicipantServiceImpl
@Transactional
public void save(Participant participant){
participantDao.save(participant);
}
// A solution could be that , but not very clean...there should be an another way, no?
GlobalServiceImpl
@Transactional
public void save(Participant participant,Sample sample){
participantDao.save(participant);
sampleDao.save(sample);
}
3- 最后一个问题,但并非最不重要。如果您想在一个全局事务中使用来自多个服务的多个方法。想象一下,您想在一个独立程序的一次执行中填满 5 个或更多表。怎么可能因为每个Service都有自己合适的事务处理方法,所以每次调用这个方法,就有一个事务处理。
a- 我已成功使用 Mkyong 教程和映射中的级联属性填充示例事务中的两个表。所以我看到了如何使它适用于一个直接连接到另一个或多个表的表。 b- 但是,如果您有 3 个表参与者 -> 样本 -> 衍生产品。您将如何在同一个事务中填写三个表。
我不知道我是否清楚。但我希望高级用户提供一些帮助或示例。 非常感谢您的宝贵时间。
【问题讨论】:
标签: spring hibernate service transactions dao