Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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_Transactions - Fatal编程技术网

Java hibernate中的事务

Java hibernate中的事务,java,hibernate,transactions,Java,Hibernate,Transactions,我刚开始冬眠 在我的项目中,我需要处理事务。 如何处理两个类中的声明性事务 示例: //class 1 class A{ createA() { insert(A); } } //class 2 class B { createB() { insert(B); } } //class 3 @Transaction(Exception.class) class C { test() { create(A); create

我刚开始冬眠

在我的项目中,我需要处理事务。 如何处理两个类中的声明性事务

示例:

//class 1
class A{

  createA()
  {
    insert(A);
  }
}

//class 2
class B
{
  createB()
  {
    insert(B);
  }
}

//class 3
@Transaction(Exception.class)

class C
{

  test()
  {

    create(A);

    create(B);

  }
}
根据上述代码,是否有可能处理事务,如果在classA中插入成功而在classB中插入失败,则事务应回滚并删除在表a中插入的与classA对应的记录

请使用声明性事务帮助我解决此问题


感谢adavace…

Hibernate像其他任何支持事务的东西一样支持事务。因此,您只需要在事务中包装对update()和save()的调用

例如:

Session sess = factory.openSession();
Transaction tx = null;
try {
    tx = sess.beginTransaction();

    // your updates to the database
    create(A);
    create(B);


    tx.commit();
}
catch (RuntimeException e) {
    if (tx != null) tx.rollback();
    throw e; // or display error message
}
finally {
    sess.close();
}
你实现了你的愿望。如果在beginTransaction()和commit()之间发生任何故障,则会回滚所有内容


您可能对会话处理有疑问,但这是另一个问题。

Hibernate和其他任何支持事务的东西一样。因此,您只需要在事务中包装对update()和save()的调用

例如:

Session sess = factory.openSession();
Transaction tx = null;
try {
    tx = sess.beginTransaction();

    // your updates to the database
    create(A);
    create(B);


    tx.commit();
}
catch (RuntimeException e) {
    if (tx != null) tx.rollback();
    throw e; // or display error message
}
finally {
    sess.close();
}
你实现了你的愿望。如果在beginTransaction()和commit()之间发生任何故障,则会回滚所有内容


您可能对会话处理有疑问,但这是另一个问题。

谢谢Milenkoski,我正在尝试使用声明式事务处理,所以您能帮我解决这个问题吗。当您注释@Transaction方法时,它会将整个方法包装在一个事务中。所以少了一些样板…Mikenkiski,你能帮我举个例子吗?我试着用事务注释包装这个方法,但没有用。当第二次插入失败时,记录正在被插入。如果您使用的是Spring,如果您使用的是EJB,则需要设置:1。hibernate.transaction.manager_lookup_类为JEE容器2指定查找策略。将hibernate.transaction.factory_class设置为org.hibernate.transaction.cmttransactionfactory谢谢Milenkoski,我正在尝试使用声明式事务处理,所以你能帮我吗?没有区别。当您注释@Transaction方法时,它会将整个方法包装在一个事务中。所以少了一些样板…Mikenkiski,你能帮我举个例子吗?我试着用事务注释包装这个方法,但没有用。当第二次插入失败时,记录正在被插入。如果您使用的是Spring,如果您使用的是EJB,则需要设置:1。hibernate.transaction.manager_lookup_类为JEE容器2指定查找策略。将hibernate.transaction.factory_类设置为org.hibernate.transaction.CMTTransactionFactory