将Hibernate活动转储到sql脚本文件

将Hibernate活动转储到sql脚本文件,sql,hibernate,scripting,Sql,Hibernate,Scripting,我正在尝试将hibernate活动(仅dml操作)记录到sql脚本文件中。 我的目标是通过执行生成的脚本,找到一种将数据库从给定的起点重建到当前状态的方法 我可以从log4j日志中获取sql查询,但是它们比原始sql查询有更多的信息,我需要解析它们并只提取有用的语句 因此,我正在寻找一种编程方式,可能是通过侦听persist/merge/delete操作和访问hibernate生成的sql语句 我不喜欢重新发明轮子,所以,如果有人知道这样做的方法,我将非常感激 提前感谢通常,最好的方法是打开SQ

我正在尝试将hibernate活动(仅dml操作)记录到sql脚本文件中。 我的目标是通过执行生成的脚本,找到一种将数据库从给定的起点重建到当前状态的方法

我可以从log4j日志中获取sql查询,但是它们比原始sql查询有更多的信息,我需要解析它们并只提取有用的语句

因此,我正在寻找一种编程方式,可能是通过侦听persist/merge/delete操作和访问hibernate生成的sql语句

我不喜欢重新发明轮子,所以,如果有人知道这样做的方法,我将非常感激


提前感谢

通常,最好的方法是打开SQL server上的日志记录。所有主要的RDBMS都支持记录它们运行的所有SQL语句。这样做的另一个好处是可以捕获在Hibernate之外发生的事情。

一般来说,最好的方法是打开SQL server上的日志记录。所有主要的RDBMS都支持记录它们运行的所有SQL语句。这还有一个额外的优点,就是可以捕获在Hibernate之外发生的事情。

您还可以尝试使用它拦截/记录数据库的Hibernate流量,并将其转储到XML文件中。您可能必须手动解析该文件,但所有信息都会在那里。

您也可以尝试使用它拦截/记录数据库的hibernate流量,并将其转储到XML文件中。您可能需要手动解析文件,但所有信息都会在那里。

您还可以直接在JDBC级别挂接,并记录执行的JDBC语句

是一个很好的工具来检查正在发生的事情。它可以记录查询,但我不知道您是否可以按原样重播它们


我确信还有其他这样的工具(或者更糟糕的是,您可以尝试将
数据源
连接
预处理语句
子类化,由您自己选择实现)。

您还可以直接在JDBC级别挂钩,并记录执行的JDBC语句

是一个很好的工具来检查正在发生的事情。它可以记录查询,但我不知道您是否可以按原样重播它们


我相信还有其他类似的工具(或者更糟糕的是,你可以尝试将
数据源
连接
预处理语句
子类化,由你自己选择实现)。

嗨,特拉维斯,在我的例子中,这不是一个好的选择,因为我想检测是否由于绕过应用程序执行的操作而导致数据库中的某些内容发生了更改。无论如何,谢谢。日志都是通过用户关联完成的。如果Hibernate与特定用户连接,只需重播该用户所做的那些语句。如果您认为这是因为“安全性”而不起作用,那么您的安全模型首先就被破坏了。嗨,Travis,在我的情况下,这不是一个好的选择,因为我想检测数据库中是否由于绕过应用程序执行的操作而发生了更改。无论如何,谢谢。日志都是通过用户关联完成的。如果Hibernate与特定用户连接,只需重播该用户所做的那些语句。如果您认为这是因为“安全性”而无法工作,那么您的安全模型首先就被破坏了。好的选择,我将阅读文档。谢谢R0管理员。好的选择,我将阅读文档。谢谢R0MANARMY。如果我能钩住jdbc语句,这就是我要找的。我会调查一下。你曾经实现过这样的东西吗?谢谢ewernli。@zeven没有。我使用过P6Spy或其他依赖于此技术的产品(例如Glassfish可以包装底层数据源的JDBC对象),但我自己从来没有为JDBC对象开发过包装器。如果我能钩住JDBC语句,这就是我要找的。我会调查一下。你曾经实现过这样的东西吗?谢谢ewernli。@zeven没有。我使用过P6Spy或其他依赖于此技术的产品(例如Glassfish可以包装底层数据源的JDBC对象),但我自己从未为JDBC对象开发过包装器。