Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 流中的持久性_Spring_Zk - Fatal编程技术网

Spring 流中的持久性

Spring 流中的持久性,spring,zk,Spring,Zk,我用Spring3.0、SpringWebFlow2.3、ZK5.0.7、ZKSpring3.0和hibernate实现了一个小型web应用程序 其中一个流显示了一个任务板(zk borderlayout),其上的面板表示任务。如果用户添加新任务,我将使用流管理的persistence启动一个新的子流。新任务将在流的末尾持久化。一切正常 此外,用户还可以在任务板上拖放面板,以更改任务的状态(“未启动”、“正在进行”)。任务的新状态应该保留在所提到的流中,而不是在末尾。我通过在组件的onDrop侦

我用Spring3.0、SpringWebFlow2.3、ZK5.0.7、ZKSpring3.0和hibernate实现了一个小型web应用程序

其中一个流显示了一个任务板(zk borderlayout),其上的面板表示任务。如果用户添加新任务,我将使用流管理的persistence启动一个新的子流。新任务将在流的末尾持久化。一切正常

此外,用户还可以在任务板上拖放面板,以更改任务的状态(“未启动”、“正在进行”)。任务的新状态应该保留在所提到的流中,而不是在末尾。我通过在组件的onDrop侦听器中调用DAO的特殊更新方法(见下文)实现了此功能。这也行

    public void updateNow(Task task) {
    EntityManager em = getJpaTemplate().getEntityManagerFactory().createEntityManager();
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    em.merge(task);
    tx.commit();
}
我读到这篇关于流管理的持久性的文章,我问自己这是否是在流管理之前保持更改的正确方法


有什么建议吗?

根据您的参考文章(),在webflow属于“非原子流”类别之前提交事务。 实现“原子流”或“非原子流”取决于您的用例。所以这取决于你的主流程是否应该是“原子的”? 如果它在您的用例中是原子的,那么您应该在web流结束时持久化任务并提交。作为任务状态,我认为flowscope变量可以满足您的需求。 如果它不是aotmic,那么您肯定可以在流结束之前提交它。您仍然可以利用流管理的上下文来持久化新任务。 只需将您的方法设置为@Transactional(readOnly=true),这在“SpringWebFlow 2中的流管理持久化”中的“非原子Web流”中有描述


这是开发人员对“原子”或“非原子”web流的决定。 对于原子web流,在流中的所有操作方法上声明
@Transactional(readOnly=true)
,并在流的末尾应用

对于非原子web流,应用
@Transactional(readOnly=false)
在带注释的方法末尾提交事务。没有必要运行用户管理的事务。

我知道这是一篇老文章,但我想你在你的段落中指的是@Transactional(readOnly=false)。谢谢你的帖子,让我知道在持久性上下文中仍然可以+1.
@Transactional(readOnly = false)
    public Booking createBooking(Long hotelId, String username) {
        Hotel hotel = em.find(Hotel.class, hotelId);
        User user = findUser(username);
        Booking booking = new Booking(hotel, user);
        em.persist(booking);
        return booking;
}