使用Hibernate的MANUAL刷新模式扩展的应用程序事务是在对话范围中控制的。Seam可以透明地管理刷新模式扩展。
如果将@Begin注解中的flushMode属性(或者页面描述符标签<begin-conversation>中的flush-mode属性)设置为MANUAL,Seam就会在对话启动时将持久化管理器转换成手工刷新。
@Begin(flushMode = FlushModeType.MANUAL)
public void beginApplicationTransaction () {...}
可以在组件描述符中全局的设置默认的刷新模式:
<core:manager default-flush-mode="MANUAL" ../>
应用程序事务的MANUAL刷新模式代码示例:
...
@Name(" ")
@Scope(ScopeType.CONVERSATION)
@Transactional
public class ... implements Serializable {
@In private EntityManager em;
@RequestParameter private Long facilityId;
@Out private Course course;
@Begin(flushMode = FlushModeType.MANUAL) //启动应用程序事务
public void addCourse () {
course = new Course ();
course.setFacility (
mentityManager.find(Facility.class,facilityId));
entityManager.persist(course); //不将变更刷到数据库
}
@Begin(flushMode = FlushModeType.MANUAL) //启动应用程序事务
public void editCourse (Long id) {
course = em.find(Course.class,id);
}
public String submitBasicInfo() { //不将变更刷新到数据库
return "next";
}
...
@End public String save () {
em.flush();//将变更刷新到数据库
}
}