java - Hibernate:提交方法在日志中提供输出但不输入数据库?

标签 java sql hibernate log4j

我正在尝试使用 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 语句。因为您注释掉了提交,所以该语句被执行但从未提交,因此在 session 关闭时回滚。

关于java - Hibernate:提交方法在日志中提供输出但不输入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34346743/

相关文章:

java - Web应用程序架构: RESTful and web should share the same DTOs?

java - 如何解决使用Spring加载.properties文件时找不到文件的问题?

java - 向上转换 java RTTI

python - SQL 重新格式化/更改 TableView ,将重复内容作为列

mysql - 将字符串插入 SELECT (MySql) 时保持前导零

java - spring+hibernate 设置不允许保存

java - 将函数应用于 TextView 中的所有字符串

mysql - 如何计算表格的列数

java - Hibernate SQLite SQLITE_BUSY

java - Hibernate错误: org. xml.sax.SAXParseException:必须声明元素类型 "hibernate-mapping"