在我的托管 bean 中管理事务回滚
Manage rollback on transaction in my managed bean
我正在使用 JPA/hibernate、Spring 和 JSF。
所以我的申请组织如下:
我有我的实体,
我的 Dao 接口和实现 for each entity 我在其中定义了基本方法:findById
、add
、update
、remove
...
然后我有我的服务层,它只使用 DAO 接口,那里的方法与我的 DAO 中的方法基本相同。
我的问题是在我的支持 bean 中,我有一个方法 Add_hospital()
,它添加了一家医院以及该医院的服务,所以我的方法看起来像
add_hospital(){
add-hospital();
add-services();
add-Hospital-schedule();
}
所以这个方法是一个事务,我希望如果发生某些问题,事务回滚,但我知道回滚需要在我的 DAO 中管理,我是否需要定义我的方法 Add_hospital()
在我的托管 bean 中,在这个阶段我有这种插入组合。
请问如何解决这个问题?
交易应该在服务层管理,而不是数据访问。
来自 spring 的示例:
@Transactional(readOnly = true)
public class DefaultFooService implements FooService {
public Foo getFoo(String fooName) {
// do something
}
// these settings have precedence for this method
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void updateFoo(Foo foo) {
// do something
}
}
我正在使用 JPA/hibernate、Spring 和 JSF。
所以我的申请组织如下:
我有我的实体,
我的 Dao 接口和实现 for each entity 我在其中定义了基本方法:findById
、add
、update
、remove
...
然后我有我的服务层,它只使用 DAO 接口,那里的方法与我的 DAO 中的方法基本相同。
我的问题是在我的支持 bean 中,我有一个方法 Add_hospital()
,它添加了一家医院以及该医院的服务,所以我的方法看起来像
add_hospital(){
add-hospital();
add-services();
add-Hospital-schedule();
}
所以这个方法是一个事务,我希望如果发生某些问题,事务回滚,但我知道回滚需要在我的 DAO 中管理,我是否需要定义我的方法 Add_hospital()
在我的托管 bean 中,在这个阶段我有这种插入组合。
请问如何解决这个问题?
交易应该在服务层管理,而不是数据访问。 来自 spring 的示例:
@Transactional(readOnly = true)
public class DefaultFooService implements FooService {
public Foo getFoo(String fooName) {
// do something
}
// these settings have precedence for this method
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void updateFoo(Foo foo) {
// do something
}
}