我在Java Swing应用程序中使用的是Hibernate 4.3.5-Final,我用它(在HQL或UDPATE
中)进行了许多INSERT
,DELETE
和Criteria
的操作。
现在,我想做的是导出对数据库进行的所有修改的SQL脚本,但是我不知道该怎么做。该脚本只需要包含修改(而不是表的创建)并将它们放在.sql
文件上(导出的文件路径将由用户选择)
您有什么想法可以解决我的问题吗?
先感谢您 !
[编辑]:一些论坛谈论p6spy
,它可以回答我的问题吗?
最佳答案
p6spy
应该可以帮助您。
通常,以下应为您完成此工作:
在您的应用中启用p6spy
(请参阅官方文档:http://p6spy.github.io/p6spy/)
之后,您基本上有2个选择:
使用提供的BatchFileLogger
,通过appender=com.p6spy.engine.spy.appender.BatchFileLogger
中的spy.properties
启用它(但是尚未记录,请参见:https://github.com/p6spy/p6spy/issues/119)
要么
实现自定义com.p6spy.engine.spy.appender.MessageFormattingStrategy
,它将仅返回sql(有关实现的想法,请参见:https://stackoverflow.com/a/23521623/1581069),并通过以下方式在spy.properties
中对其进行配置:logMessageFormat=FooFormat
设置sqlexpression
以匹配您需要的查询-限制CREATE/ALTER/... TABLE/SEQUENCE/...
(请参阅官方文档:http://p6spy.github.io/p6spy/2.0/configandusage.html)
仍然存在一些棘手的问题,例如:databaseDialectDateFormat
属性(以便能够不经修改就重播输出)。有关某些常用数据库的启发,请参阅p6spy本身的单元测试:https://github.com/p6spy/p6spy/tree/master/src/test/resources/com/p6spy/engine/spy