0

我在学习 Hibernate 时遇到了问题。我写了 UnitTest 并尝试将对象添加到数据库中。所有选择都正常工作,但插入不能正常工作。

public class HibernateTutorial extends BaseTest {

@Autowired
SessionFactory sessionFactory;

@Test
@Transactional
public void hibernateTutorial() {

    @SuppressWarnings("unchecked")
    List<User> users = sessionFactory.getCurrentSession().createQuery("from User").list();


    sessionFactory.getCurrentSession().saveOrUpdate(new User("HiberTest", "HiberPass", "Hiber@Mail.ru", "HiberSurname",
    "HiberLastname", "HiberAddress", "123432"));

}

我也尝试这样的事情

public class HibernateTutorial extends BaseTest {

@Autowired
SessionFactory sessionFactory;

@Test
@Transactional
public void hibernateTutorial() {

    @SuppressWarnings("unchecked")
    List<User> users = sessionFactory.getCurrentSession().createQuery("from User").list();


    sessionFactory.getCurrentSession().saveOrUpdate(
            new User("HiberTest", "HiberPass", "Hiber@Mail.ru", "HiberSurname", "HiberLastname", "HiberAddress", "123432"));
    sessionFactory.getCurrentSession().getTransaction().commit();
}
}

它向我抛出事务未成功启动的异常,但它添加了用户

这是一个例外

org.springframework.transaction.TransactionSystemException:无法回滚休眠事务;嵌套异常是 org.hibernate.TransactionException: Transaction not successfully started at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:845) ) 在 org.springframework.test.context.transaction.TransactionalTestExecutionListener$TransactionContext.endTransaction(TransactionalTestExecutionListener.java:512) 在 org.springframework.test 的 org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:822)。上下文.事务。

4

1 回答 1

0

我可以在您的代码中看到 2 个问题。

1 - 您的交易尚未开始。

答:在对数据库执行任何操作之前,您必须使用 getSession().beginTransaction() 方法。

2 - 如果您的事务失败,则没有回滚方法

答:使用 try-catch 块,请参见下面的示例。

我的代码示例:

public void salvarDB(Object object)
{
    Session session = HibernateUtil.getSession();
    HibernateUtil.beginTransaction();
    try
    {
        session.save(object);
        HibernateUtil.commit();
        avisos.salvoComSucesso(object);
    }
    catch(ConstraintViolationException e)
    {
        avisos.registroJaInserido(object);
        HibernateUtil.rollback();
    }
    catch (Exception ex) {
        avisos.falhaAoSalvar(object);
        HibernateUtil.rollback();
    }
    finally {
        HibernateUtil.closeSession();
    }
}
于 2013-03-06T13:59:55.120 回答