postgresql 做了分区继承表,对象save()后得不到ID

我使用的是postgresql数据库,做了分表处理,表结构继承主表按照日期范围进行存储,在新建对象并save()后,当前对象中没有返回主键ID,必须重新获取一次对象才有ID,这种办法如何解决呢1.png

这个是save()后的,没有id项

2.png

重新获取一次对象才会出来,这种有解决办法吗

评论区

JFinal

2016-11-01 21:27

id 值生成的策略是什么? 数据表是否设置了自增

此外,jfinal 会将设置了自增的主键值在 save() 被调用后立即写入调用 save() 方法的 model中,例如 xxxModel.save() 那么就写回 xxxModel 这个对象中,所以要注意一下所观测的 model 是否为调用 save() 的原始 model

JFinal

2016-11-01 21:28

建议在 Model.save() 方法中的 getGeneratedKey(pst, table, config); 这行代码处设置一个断点,单步调试进去,看 id 值是否获取到了

万龙

2016-11-02 10:56

@JFinal 数据库ID是自增的

JFinal

2016-11-02 11:00

@万龙 按照上面所说的,单步调试一下 getGeneratedKey 这个方法

万龙

2016-11-02 11:00

@JFinal 谢谢,我加断点试试,在研究研究,因为分表后表名就变成了XXXX_2016_11,记录不在主表,所以可能跟这个有关系

万龙

2016-11-02 11:14

@JFinal 加断点到if((this.get(pKey) == null || config.dialect.isOracle()) && rs.next()) { 这里就跳出了

JFinal

2016-11-02 11:29

@万龙 为啥跳出了? 要确保代码可以进入这个 if 内部才可以注入 id 值。 此外,你是否设置了 postgresql 的方言: arp.setDialect(new PostgreSqlDialect())

万龙

2016-11-02 11:36

@JFinal 嗯,已经设置arp.setDialect(new PostgreSqlDialect()),我的这个表比较特殊,用的是分区继承表,存储记录用的是触发器来处理的,当记录进来用过日期来判断当前记录应该存在那个表里,所以主表里永远是空的

JFinal

2016-11-02 11:37

@万龙 适当写点代码应该是可以搞定的,虽然是分表了,但这个 id 仍然会被写到某个 model 之中,想办法将 id 值从那个 model 中得到再转存一份到你希望的 model中即可,记得搞定后回来分享一下,在分享频道简单发个贴

万龙

2016-11-02 11:41

嗯,这刚好是一个锻炼的机会,我先用笨办法处理一下,等项目流程跑通后在做优化,把这部分问题看能否解决一下,解决了分享给大家,估计也有人会碰到这种问题

JFinal

2016-11-02 12:02

@万龙 感谢支持社区发展

zonghua

2016-11-28 09:37

题主是怎么用 IDEA 启动 JFinal 的啊?

热门反馈

扫码入社