【问题标题】:Hibernate : Objects are getting saved without transaction Object休眠:在没有事务对象的情况下保存对象
【发布时间】:2017-04-08 17:15:15
【问题描述】:

我有以下代码用于将对象保存在数据库中,

import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.hibernate.Session;
import org.hibernate.Transaction;
import model.Hibernatetest;
public class Test 
{
   static EntityManagerFactory objEntityManagerFactory;
   static Session objSession;
   static Transaction objTransaction;
   public static void main(String[] args) 
   {
        objSession = (Session) 
        objEntityManagerFactory.createEntityManager().getDelegate();
        //objTransaction = objSession.getTransaction();
        //objTransaction.begin();
        Hibernatetest obj = new Hibernatetest();
        obj.setName("Nobal");
        obj.setAddress("wlfjegtjwdfhdg");
        objSession.save(obj);
        obj.setName("235611111");
        objSession.flush();
       //objTransaction.commit();
        objSession.close();
    }

    public static void getConnection()
    {
        Map<String,String> properties = new HashMap<String,String>();
            properties.put("hibernate.connection.username", "root");
            properties.put("hibernate.connection.password", "root");
            properties.put("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
            properties.put("hibernate.connection.url", "jdbc:mysql://localhost:3306/hibernatetest");
            properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");

         objEntityManagerFactory = Persistence.createEntityManagerFactory("Hibereg", properties);
    }
}

而Persistence文件如下:

<persistence xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="Hibereg">
<class>entities.Hibernatetest</class>
</persistence-unit>
</persistence>

案例一:

问题是当我使用 hibernate-core-5.2.8.jar 运行上述代码时,并没有创建任何事务对象(你可以看到我注释了与事务相关的代码) 那么上面的代码给了我以下异常。

'TransactionRequiredException' no transaction is in progress.'

但是,如果我取消注释交易代码,一切正常。

案例2:

但是当我使用 hibernate-core-4.1.4.jar 运行代码时,通过在上面提供的代码 sn-p 中注释事务的代码,它没有给出这样的异常。也就是说,它从不抱怨没有事务对象并将对象保存在数据库中。 这是怎么回事?

我在互联网上读到 事务对象是必须执行插入和更新,(我不确定选择)但是第二个场景是如何成功执行的?

【问题讨论】:

  • 请发布您的 hibernate.cfg.xml 代码
  • 我有 persistent.xml @MehmoodMemon,我在问题中添加了它。
  • Hibernate 5.2 太不一样了,应该叫 Hibernate 6,如果你要升级我会先升级到 5.1

标签: java hibernate


【解决方案1】:

从 Hibernate 5.2 开始,此功能被包含在 JPA 规范中,该规范不允许在事务边界之外进行任何更新刷新。为了覆盖它,请在您的休眠设置中使用以下内容:-

properties.put("hibernate.allow_update_outside_transaction", "true");

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 2015-10-19
  • 1970-01-01
相关资源
最近更新 更多