Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Java HIbernate中的事务_Java_Hibernate - Fatal编程技术网

Java HIbernate中的事务

Java HIbernate中的事务,java,hibernate,Java,Hibernate,在以下代码中: SessionFactory sessionFactory = new Configuration().configure("student.cfg.xml").buildSessionFactory(); Session session = sessionFactory.openSession(); //Transaction tran = session.beginTransaction(); session.save(student); //

在以下代码中:

SessionFactory sessionFactory = new Configuration().configure("student.cfg.xml").buildSessionFactory();
    Session session = sessionFactory.openSession();
    //Transaction tran = session.beginTransaction();
    session.save(student);
    //tran.commit();
    session.flush();
    session.close();
无论我是否注释/取消注释事务,它们都可以正常工作,即在没有事务的情况下也可以成功执行保存操作。但是当我检查文档时,他们总是在插入更新删除之前使用事务。有什么具体原因吗?我错过什么了吗

请让我知道这件事。我相当困惑:(


关于,

当您总是使用自动提交时,它可能会损害您的数据库。假设您希望一次提交一堆工作。在这种情况下,您需要创建事务并在完成所有工作后提交所有工作。例如,您需要为原子工作执行大量数据库访问。在这种情况下,您需要执行所有在事务中工作并提交所有工作

Session session = factory.openSession();
Transaction tx = session.beginTransaction();

// do some work
tx.commit();
当然是用你的挡块。

阅读 这篇文章来自JBOSS


有一件事我相信,如果您不使用事务(在某个时候您可能需要它,如果不需要原子操作的话)然后,任何与数据库相关的操作都会命中数据库。这会使系统变得非常慢。如果您执行事务,那么hibernate会通过一次命中数据库来完成同一事务中的所有操作。在某个时候,我以前读到过这一点。

我认为hibernate中的非选择查询正在执行多个查询(或使用多个操作)这就是为什么我们需要事务来执行它们。

DML命令需要显式提交..您是否检查了Insert、Delete、Update命令?好的,所以我从您的帖子中了解到:1)如果我不使用事务,则会发生隐式提交,而如果我使用事务,则显式提交数据。2) 隐式提交是有害的,因此事务应该用于显式提交。如果我没弄错,请告诉我。如果我错了,请加些东西。“有害”这个词可能不是正确的,因为它是关于你的设计的。事务是一组数据访问操作。如果多个数据库操作对您来说是一个单元工作,那么您需要将所有这些操作提交到一起,这意味着它们必须在一个事务中。我对您的第一个响应有一个疑问:假设我读取了一些数据,开始一个事务,那么事务中的数据也有可能得到更新,对吗?你能解释一下这句话吗?别跟我的例子混淆了。我想说的是工作单位。您有一个操作是原子操作,它需要执行多个db操作。在本例中,您将它们放入事务中。(这就像做所有的事或不做任何事)好的,术语
做所有的事或不做任何事
很清楚。我尝试了两个连续的保存操作,在第二个保存操作中故意违反了某些规则。如果添加事务,则不会添加有效或无效的保存操作行。但是,如果我删除了该事务,则会插入第一个有效保存,但不会插入第二个有效保存。除了这个多数据库操作场景之外,这个事务还有其他用途吗?请让我知道。谢谢你的回复