首先,对不起,如果我的英语非常糟糕,我是使用hibernate的新手,所以有一些问题我想问所有大四学生。 这是条件: 我使用zk作为视图,在一个视图中我有一个工具栏,有(添加),(保存),(取消)按钮。所以我想要的是当用户klik(添加)hibernate将启动一个新的事务,然后用户在该用户klik(保存)之后插入一些数据。在这个(保存)按钮事件中,hibernate将调用commit将数据插入数据库。
问题是当用户klik保存时,它会显示错误消息 “如果没有活动交易,则提交无效” 在追踪程序流程后,我发现当用户klik(保存)按钮时,我之前启动的交易不再有效。
##我想问的是为什么交易处于非活动状态而我尚未提交? ##
我正在使用带有休眠和弹簧的弹簧 hibernate.current_session_context_class = Thread感谢您的帮助
答案 0 :(得分:1)
没有看到代码就无法分辨。但你想做的是一个非常糟糕的主意。不要这样做。交易应尽可能短。让交易长时间打开(您的用户可能需要一段时间才能在添加和保存点击之间)保持连接打开并且其他并发用户无法使用,可能导致超时,并且可以锁定一些数据库行或表,使所有其他用户等待您的事务完成。
只有在用户单击保存按钮时,才能在数据库中插入并提交。 添加按钮所做的修改不应保留在数据库中,而应存储在内存中,直到用户单击保存。