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

Hibernate: commit method gives output in log but doesn't enter to database?

我正在试验 Hibernatelog4j。在下面的代码中,我 故意 注释掉 txn.commit() 以查看结果。

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

客户端Class:

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 语句。因为您注释掉了提交,所以该语句已执行但从未提交,因此在您的会话关闭时回滚。