开发者社区> 问答> 正文

JFinal 2.1 Generator 多schema下的生成问题?报错

使用了postgersql数据库,数据库中有多个schema,如果一个表在一个非public schema下有,但public schema下没有的话就会报错。

Exception in thread "main" java.lang.RuntimeException: org.postgresql.util.PSQLException: ERROR: relation "xxxxx" does not exist
  位置:15
at com.jfinal.plugin.activerecord.generator.MetaBuilder.build(MetaBuilder.java:101)
at com.jfinal.plugin.activerecord.generator.Generator.generate(Generator.java:196)
at GeneratorDemo.main(GeneratorDemo.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: org.postgresql.util.PSQLException: ERROR: relation "xxxxx" does not exist
  位置:15
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2182)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1911)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:173)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:622)
at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:458)
at org.postgresql.jdbc.PgStatement.executeQuery(PgStatement.java:374)
at com.jfinal.plugin.activerecord.generator.MetaBuilder.buildColumnMetas(MetaBuilder.java:169)
at com.jfinal.plugin.activerecord.generator.MetaBuilder.build(MetaBuilder.java:96)
... 7 more

这个问题怎么解决?

展开
收起
爱吃鱼的程序员 2020-06-10 15:14:00 536 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    引用来自“玛雅牛”的评论

    jdbc:postgresql://localhost:15432/djpt?currentSchema=public,sys,app
    最后的参数就是搜索 schema的顺序。使用这个参数试一试。

    引用来自“玛雅牛”的评论

    jdbc:postgresql://localhost:15432/djpt?currentSchema=public,sys,app
    最后的参数就是搜索 schema的顺序。使用这个参数试一试。

      在MetaBuilder中找到这行代码:

    ResultSetrs=dbMeta.getTables(conn.getCatalog(),null,null,newString[]{"TABLE","VIEW"});  将其改成如下代码: ResultSetrs=dbMeta.getTables(conn.getCatalog(),dbMeta.getUserName(),null,newString[]{"TABLE","VIEW"});

      看能否解决问题,这几天正在想办法改进不同数据库的这个地方,可通过继承MetaBuilder覆盖掉这个builderTableNames(...)方法,然后通过generator.setMetaBuilder(...)来切换到你的实现上去。

      我这急需反馈,试用后早点反馈给我结果,感谢

    引用来自“JFinal”的评论

      在MetaBuilder中找到这行代码:

    ResultSetrs=dbMeta.getTables(conn.getCatalog(),null,null,newString[]{"TABLE","VIEW"});  将其改成如下代码: ResultSetrs=dbMeta.getTables(conn.getCatalog(),dbMeta.getUserName(),null,newString[]{"TABLE","VIEW"});

      看能否解决问题,这几天正在想办法改进不同数据库的这个地方,可通过继承MetaBuilder覆盖掉这个builderTableNames(...)方法,然后通过generator.setMetaBuilder(...)来切换到你的实现上去。

      我这急需反馈,试用后早点反馈给我结果,感谢

    这个地方比较纠结,因为不同的数据库这个参数的意义不同,例如oracle中这个参数代表userName,postgresql这个地方代表schema,得再权衡,或许这个地方提供扩展,让用户自己来决定传什么

    jdbc:postgresql://localhost:15432/djpt?currentSchema=public,sys,app
    最后的参数就是搜索 schema的顺序。使用这个参数试一试。

    看着就激动

    引用来自“玛雅牛”的评论

    jdbc:postgresql://localhost:15432/djpt?currentSchema=public,sys,app
    最后的参数就是搜索 schema的顺序。使用这个参数试一试。

    2020-06-10 15:14:17
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Wicket User Guide - Ref 立即下载
introduction to Apache Bean 立即下载
Apache Wicket User Guide-Refer 立即下载