休眠:提交方法在日志中给出输出但不进入数据库?



我正在试验Hibernatelog4j。在下面的代码中,我特意注释了txn.commit(),看看结果会是什么

在日志消息中,它仍然指示数据插入到我的表中,但没有插入任何内容,日志消息是什么意思?

客户端类别:

public class HelloWorldClient {
    public static void main(String[] args) {
                Session session = HibernateUtil.getSessionFactory().openSession();
                Transaction txn = session.getTransaction();
                try {
                    txn.begin();
                    Address address = new Address("19 Sample st", "Sample state", "1234");
                    Person person = new Person("Person1", address);
                    session.save(person);
                    //txn.commit();
                }   catch(Exception e) {
                        if(txn != null) { txn.rollback(); }
                        e.printStackTrace();
                }   finally {
                        if(session != null) {
                            System.out.println("------------------------PROGRAM COMPLETED-------------------------");
                            session.close();
                        }
                }
    }
}

日志输出:

00:25:51,270 DEBUG SQL:109 - insert into Person (city, street, zipcode, name) values (?, ?, ?, ?)
00:25:51,305 TRACE BasicBinder:81 - binding parameter [1] as [VARCHAR] - [Sample state]
00:25:51,306 TRACE BasicBinder:81 - binding parameter [2] as [VARCHAR] - [19 Sample st]
00:25:51,306 TRACE BasicBinder:81 - binding parameter [3] as [VARCHAR] - [1234]
00:25:51,307 TRACE BasicBinder:81 - binding parameter [4] as [VARCHAR] - [Person1]
------------------------PROGRAM COMPLETED-------------------------

数据库事务基本上就像一个便笺簿。您可以在事务的上下文中发出某些类型的SQL语句,它们实际上是针对数据库执行的,但在发出提交之前不会是可见的或永久的。

在您的案例中,您启动了一个事务并调用session.save,它生成了您显示的INSERT语句。因为您注释掉了提交,所以执行了该语句,但从未提交,因此在会话关闭时回滚。

最新更新