0

Hibernate の学習中に問題が発生しました。UnitTest を作成し、DB にオブジェクトを追加しようとしました。すべての選択は適切に機能していますが、挿入は機能していません。

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: Hibernate トランザクションをロールバックできませんでした。ネストされた例外は org.hibernate.TransactionException です: org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:679) でトランザクションが正常に開始されませんでした) org.springframework.test.context.transaction.TransactionalTestExecutionListener$TransactionContext.endTransaction(TransactionalTestExecutionListener.java:512) で org.springframework.test.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:822) で。 context.transaction.

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 に答える