使用了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
这个问题怎么解决?
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(...)来切换到你的实现上去。
我这急需反馈,试用后早点反馈给我结果,感谢
在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的顺序。使用这个参数试一试。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。