GeneratorDemo问题

使用GeneratorDemo中的方法生成的baseModel,Model和BaseModel都正常,生成的_MappingKit.java出现复合主键,用的oracle但表里主键只有一个

360截图20160829111454332.jpg

评论区

JFinal

2016-08-29 12:27

这个情况确实比较诡异,是不是设置了外键? 建议调试跟踪一下,有发现反馈一下

zdhl

2016-08-29 15:50

没有外键,我把admins表主键ID改为ID1,生成后变成
arp.addMapping("ADMINS", "ID,ID,ID,ID1", Admins.class);

zdhl

2016-08-29 15:52

只有最前面三个表的变成了多个ID在复合主键,其后的表生成的主键都没问题

JFinal

2016-08-29 17:07

没有改为 ID1 之前有无问题?

zdhl

2016-08-29 17:18

也有问题,改这前就是arp.addMapping("ADMINS", "ID,ID,ID,ID", Admins.class);

zdhl

2016-08-29 19:44

现在还发现一个问题,设置gernerator.setGenerateDataDictionary(true);无法生成DataDictionary,生成Model和BaseModel的java文件都没问题

JFinal

2016-08-29 21:02

@zdhl 我这里没有 oracle 的测试环境,无法重问题,希望你解决后发一篇分享出来,感谢支持 jfinal 社区

zdhl

2016-08-29 22:23

@JFinal 目前还没找出解决办法,又试了一种方法发现一个很奇怪的现象,如果把表名admins改为admin,生成主正常,主键为一个ID,如果在改回到表名admins,问题依旧,以上是在oracle下操作的,同样的程序换成mysql就全部正常,难道gernerator.对oracle兼容出了问题?

JFinal

2016-08-30 00:15

@zdhl 单步调试一下,看是哪一步出的问题,在 MetaBuilder 中设置断点,查看获取 id 的那部分代码执行的情况

zdhl

2016-08-30 06:13

@JFinal 从buildPrimaryKey生成的主键开始不对的,会不会ojdbc6驱动问题?

protected void buildPrimaryKey(TableMeta tableMeta) throws SQLException {
ResultSet rs = dbMeta.getPrimaryKeys(conn.getCatalog(), null, tableMeta.name);

String primaryKey = "";
int index = 0;
while (rs.next()) {
if (index++ > 0)
primaryKey += ",";
primaryKey += rs.getString("COLUMN_NAME");
}
tableMeta.primaryKey = primaryKey;
rs.close();
}

当我把admins表主键id改为id1,调试发现 rs.getString("COLUMN_NAME")输出四个主键,分另为ID,ID,ID,ID1,

JFinal

2016-08-30 09:59

@zdhl 正常情况下应该是输出一个主键值,换驱动吧,历史上多次出现过 oracle 驱动出现的问题,例如参数超过 8 个的时候出异常的问题,换驱动解决以后回来分享一下。

zdhl

2016-08-31 11:12

升级oracle解决问题,换驱动不管事