【问题标题】:Generate a SQL script from Hibernate从 Hibernate 生成 SQL 脚本
【发布时间】:2014-07-02 07:42:46
【问题描述】:

我在我的 Java Swing 应用程序中使用 Hibernate 4.3.5-Final,我用它做了很多 UDPATEINSERTDELETE(在 HQL 或 Criteria 中)。

现在,我要做的是导出对我的数据库所做的所有修改的 SQL 脚本,但我不知道该怎么做。该脚本只需要包含修改(而不是表的创建)并将它们放在.sql 文件中(导出的文件路径将由用户选择)

你有什么想法可以解决我的问题吗?

提前谢谢你!

[编辑] : 一些论坛讨论p6spy,它可以回答我的问题吗?

【问题讨论】:

    标签: java sql swing hibernate p6spy


    【解决方案1】:

    p6spy 应该在这里提供帮助。

    一般来说,以下应该为您完成这项工作:

    1. 在您的应用中启用p6spy(参见官方文档:http://p6spy.github.io/p6spy/

    之后你基本上有两个选择:

    1. 使用提供:BatchFileLogger,通过:appender=com.p6spy.engine.spy.appender.BatchFileLogger in spy.properties 启用它(但尚未记录,请参阅:https://github.com/p6spy/p6spy/issues/119

    1. 实现自定义com.p6spy.engine.spy.appender.MessageFormattingStrategy,这将只返回sql(请参阅:https://stackoverflow.com/a/23521623/1581069以获取有关实现的想法)并通过spy.propertiesspy.properties中配置它:logMessageFormat=FooFormat
    2. 设置 sqlexpression 以匹配您需要的查询 - 限制 CREATE/ALTER/... TABLE/SEQUENCE/...(参见官方文档:http://p6spy.github.io/p6spy/2.0/configandusage.html

    还有一些棘手的地方,比如:

    【讨论】:

    • 感谢您的帮助,所以我会尝试p6spy。另外,我忘记了一点,我的应用程序是“多方言”,这意味着我让用户在Oracle SQLMS SQL Server 2005MS SQL Server 2005(在登录屏幕上)之间进行选择。那么如何动态设置realdriver
    • 好吧,这取决于,如果您使用 jdbc4 驱动程序 + 将使用 jdbc url 代理(对于 Oracle,类似:jdbc:p6spy:oracle:thin:@localhost:1521:XE)=> 根本不需要配置 realdriver。仍然取决于您是否使用某些应用服务器,...随时询问更多详细信息:groups.google.com/forum/#!forum/p6spy-users
    • 顺便说一句。属性:realdriver 已被弃用,取而代之的是:driverlist(仍有一些文档可能已过时)
    • 所以我按照你对第二个解决方案的建议做了(我创建了一个实现MessageFormattingStrategy 的类)。现在我将尝试仅过滤UDPATEINSERTDELETE sqlexpression,但我认为大部分工作现在已经完成!谢谢你一千次!
    • 我的问题几乎解决了。我在spy.properties 中使用filter=truesqlexpression=^(update|insert|delete).*$ 过滤了我的SQL .log,但有一个小问题:值没有转义。因此,如果用户将字段添加到This is a test ',则脚本将为update MYTABLE set field='This is a test '' where id=1;,并且由于未转义的',它将无法工作。有解决办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多