gpt4 book ai didi

java - hibernate : Objects are getting saved without transaction Object

转载 作者:搜寻专家 更新时间:2023-10-30 21:12:35 25 4
gpt4 key购买 nike

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

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 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.'

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

案例二:

但是当我使用 hibernate-core-4.1.4.jar 运行代码时,通过注释上面提供的代码片段中的交易代码,它没有给出这样的异常。也就是说,它从不提示缺少事务对象并将对象保存在数据库中。这里发生了什么?

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

最佳答案

自 Hibernate 5.2 起,此功能内联到 JPA 规范中,该规范不允许任何更新刷新到事务边界之外。为了覆盖它,请在您的 hibernate 设置中使用以下内容:-

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

关于java - hibernate : Objects are getting saved without transaction Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43298072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com