Grails逆向工程数据库

时间:2014-09-17 15:04:37

标签: grails gorm reverse-engineering

我正在尝试评估Grails作为即将推出的项目的解决方案。已经有一个正在使用的大型数据库,如果全部都不会被修改。我不想将数据库反向工程为GORM域对象作为起点。

我在http://www.grails.org/plugin/db-reverse-engineer找到了一个。我安装并配置了它,但是当我运行它时,我一遍又一遍地看到同样的错误。堆栈跟踪在下面。

有人可以帮我纠正错误,或推荐其他工具用于对Grails进行逆向工程吗?我过去曾使用Netbeans将数据库逆向工程到JPA实体,这些实体运行得非常好。我希望与Grails有类似的东西。

| Error Error executing script DbReverseEngineer: javax/transaction/Transaction (NOTE: Stack trace has been filtered. Us
e --verbose to see entire trace.)
java.lang.NoClassDefFoundError: javax/transaction/Transaction
        at grails.plugin.reveng.GrailsJdbcBinder.readDatabaseSchema(GrailsJdbcBinder.groovy:51)
        at org.hibernate.cfg.JDBCBinder.readFromDatabase(JDBCBinder.java:93)
        at org.hibernate.cfg.JDBCBinder$readFromDatabase.call(Unknown Source)
        at grails.plugin.reveng.GrailsJdbcMetaDataConfiguration.readFromJDBC(GrailsJdbcMetaDataConfiguration.groovy:32)
        at grails.plugin.reveng.GrailsJdbcMetaDataConfiguration$readFromJDBC.call(Unknown Source)
        at grails.plugin.reveng.Reenigne.buildConfiguration(Reenigne.groovy:114)
        at grails.plugin.reveng.Reenigne.execute(Reenigne.groovy:60)
        at grails.plugin.reveng.Reenigne$execute.call(Unknown Source)
        at grails.plugin.reveng.RevengRunner.run(RevengRunner.groovy:81)
        at grails.plugin.reveng.RevengRunner$run.call(Unknown Source)
        at DbReverseEngineer$_run_closure1.doCall(DbReverseEngineer:36)
        at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133)
        at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy:1
85)
        at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy)
        at org.codehaus.gant.GantBinding.withTargetEvent(GantBinding.groovy:90)
        at org.codehaus.gant.GantBinding.this$4$withTargetEvent(GantBinding.groovy)
        at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy:185)
        at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy)
        at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
        at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
        at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
        at gant.Gant.withBuildListeners(Gant.groovy:427)
        at gant.Gant.this$2$withBuildListeners(Gant.groovy)
        at gant.Gant$this$2$withBuildListeners$0.callCurrent(Unknown Source)
        at gant.Gant.dispatch(Gant.groovy:415)
        at gant.Gant.this$2$dispatch(Gant.groovy)
        at gant.Gant.invokeMethod(Gant.groovy)
        at gant.Gant.executeTargets(Gant.groovy:591)
        at gant.Gant.executeTargets(Gant.groovy:590)
Caused by: java.lang.ClassNotFoundException: javax.transaction.Transaction
        ... 29 more
| Error Error executing script DbReverseEngineer: javax/transaction/Transaction

4 个答案:

答案 0 :(得分:9)

实际上这个插件与Hibernate 4不兼容......但是,自从最后一次推出就像很久以前一样,看起来你很快就会得到一个新版本来使用它:)

但是,你仍然可以继续使用这个版本的Grails和db-reverse-engineer:0.5插件,通过切换你的Hibernate版本,回到3.这很容易!

在BuildConfig.groovy中,评论该行 运行时":hibernate4:4.X.X.X"

然后添加: 运行时":hibernate:3.6.10.17"

(顺便说一下,别忘了将正确的连接器添加到数据库中,我自己使用这种依赖: 编译' mysql:mysql-connector-java:5.1.22' )

答案 1 :(得分:0)

好吧,该插件使用Hibernate Tools进行逆向工程,因此您可以尝试直接使用它们。

答案 2 :(得分:0)

有一个新版本修复了许多错误,例如:0.5.1 0.5

BuildConfig.groovy

runtime ':db-reverse-engineer:0.5.1'

答案 3 :(得分:0)

我也面临同样的问题,但我没有切换到hibernate 3.x版本主要问题是连接器,在BuildConfig.groovy中注释mysql连接器 我已经在grails应用程序的lib文件夹中添加了javax.transaction jar,这解决了问题