在同一会话中使用多个事务的示例

时间:2019-02-28 04:12:10

标签: java hibernate

我对Hibernate还是陌生的。我正在尝试使用以下示例了解会话和事务。 我有一个活动管理系统。我有一个称为事件的实体,用户可以编辑事件。 我应该将会话另存为服务类中的实例变量,并使用它来执行多个 交易方式不同?我也想将其用作缓存。 会话对象应该存储在哪里?或者如何最好地实现我想要做的事情 下面-我有两个事务-首先将其提取为事件对象,其次需要对其进行编辑并将其保存到 数据库。

 ServiceClass {

     Session session ;

     Constructor () { 
         session = sessionFactory.getSession();
     }


     //First transaction

     public Event getEvent() {

        begin new Transaction on session.
           Fetch new Event object 
        End new transacton

        return event; //to display to user
     }

     //Second transaction 

     public void editEvent(String newName, Date newDate) { 

         begin Transaction
           Obtain the Event object from the session which was result of First transaction above
           event.setName(newName);   //This should be in persistent state and affect the database
           event.setDate(newDate);     
         end Transaction
      }


 } 

非常感谢您:)

1 个答案:

答案 0 :(得分:1)

您需要考虑会话事务。如果您的ServiceClass在多线程环境(例如Servlet)中使用,则在字段中指定它会导致线程问题。为避免此问题,请将会话创建置于editEvent()方法中,该方法应:

  1. 创建会话
  2. 开始交易
  3. 通过会话从数据库中检索实体
  4. 对实体进行更改
  5. 提交交易