JFinal设置非自增主键问题

小99 发布于 2016/09/27 19:47
阅读 524
收藏 0

@波总 ,您好:

由于最近使用了分库分表,主键id去掉了自增,由自己生成,伪代码如下

public Reocrd saveUser(………………){
	Record user = new Record();
	long id = genId();
	user.set("id",id);
	………………
	Db.save(user);
	System.out.println(user.get("id"));//此处打印为null。由于save底层的jdbc调用了getGeneratedKey方法,正好没有自增主键,就把null赋值给了Record的id字段
	return user;
}



有人则会说,id都你自己生成了,还用jfinal给你返回??直接用自己不就行了?………………

不知道有没有一个忽略设置,就是设置哪些表不使用自增,然后save的时候不强制使用生成主键方法覆盖id字段。

有些建议就要提一下嘛,比如这个方法我就想返回一个Record,让调用者直接获得刚保存的整体对象(包括主键id),如果没有一个忽略设置的话,我只能在system.out的下一行再次设置一下

user.set("id",id);

加载中
0
JFinal
JFinal

     jfinal 在这种情况下并未对主键值进行设置,下面是源代码:

private void getGeneratedKey(PreparedStatement pst, Record record, String[] pKeys) throws SQLException {
 ResultSet rs = pst.getGeneratedKeys();
 for (String pKey : pKeys)
   if (record.get(pKey) == null || config.dialect.isOracle())
     if (rs.next())
        record.set(pKey, rs.getObject(1));
 rs.close();
}
   第一个 if (record.get(pKey) == null ....) 表明,如果主键所对应的值不为 null 时,下面的代码不会执行,所以,当初你 set 进去的主键仍然在那里,建议单步调试一下,看看这个 id 值在怎么变成 null 的。
JFinal
JFinal
回复 @小99 : 升级到 jfinal 2.2 版本
小99
小99
确实,我的版本有点老了,现在最新代码确实没问题! 谢波总耐心解答
小99
小99
回复 @JFinal : 我用的1.9,
JFinal
JFinal
回复 @小99 : 你用的哪个版本的 jfinal? 建议看一下 git.oschina.net上的版本,这上面所有的版本都不是这样的代码,难道你自己改造过代码?
小99
小99
最上层调用的是public static boolean save(String tableName, Record record)
下一页
0
tonysb
tonysb
第三行id已经自动生成了,第七行还要去取出来,不太明白这么做有什么意义?
小99
小99
我只是取出来看看,这段代码,最后return出去的user.id是null
返回顶部
顶部