【问题标题】:Dump Hibernate activity to sql script file将休眠活动转储到 sql 脚本文件
【发布时间】:2010-05-05 15:56:53
【问题描述】:

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

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

所以我正在寻找一种编程方式,可能是通过监听持久/合并/删除操作并访问休眠生成的 sql 语句。

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

提前致谢

【问题讨论】:

    标签: sql hibernate scripting


    【解决方案1】:

    通常,最好的方法是在您的 SQL 服务器上打开日志记录。所有主要的 RDBMS 都支持记录它们运行的​​所有 SQL 语句。这具有捕获 Hibernate 之外发生的事情的额外优势。

    【讨论】:

    • 嗨,Travis,就我而言,这不是一个好选择,因为我想检测数据库中是否由于绕过应用程序执行的操作而发生了变化。还是谢谢。
    • 日志都是通过用户关联完成的。如果 Hibernate 与特定用户连接,只需重播该用户所做的那些语句。如果您认为由于“安全性”而这不起作用,那么您的安全模型首先被破坏了。
    【解决方案2】:

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

    【讨论】:

    • 不错的选择,我会阅读文档。谢谢 R0MANARMY。
    【解决方案3】:

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

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

    我敢肯定还有其他这样的工具(或者更糟的是,您可以尝试将您选择的 DataSourceConnectionPreparedStatement 实现子类化,然后自己做)。

    【讨论】:

    • 如果我可以挂钩 jdbc 语句,这将是我正在寻找的。我会稍微调查一下。你有没有实现过这样的事情?谢谢 ewernli。
    • @zeven 不。我使用过 P6Spy 或其他依赖此技术的产品(例如 Glassfish 可以包装底层数据源的 JDBC 对象),但我自己从未开发过 JDBC 对象的包装器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多