2016-09-26 82 views
0

我用activejdbc 1.4.9和下面的示例代码正在运行就好无法检索数据库模型的getId()了在activejdbc 1.4.12

Client client = new Client(); 
client.save(); 
Assert.assertNotNull(client.getId()); 

自从我升级到1.4.12,客户端.getId()在保存插入新记录时总是返回null。即id没有被刷新。

有没有人注意到这一点呢?为了获得新创建的ID,我需要使用这个版本来做任何不同的事情吗?

回答

0

我不能用版本1.4.12来证实这一点。例如,我写了这个例子:https://github.com/javalite/simple-example/blob/new_id。查看Main.java中的代码。如您所见,代码与您的代码完全相同,但在第21行中,它会打印出新ID的实际值。

如果你可以把一个简单的例子复制你的问题,我会看看。

编辑:

既然你提供了下面的评论更多信息,问题是你的ID设置为空字符串:“”。因为ID不再是null,所以方法save()使用update而不是insert。更新然后使用ID的值更新“现有”记录,结果不做任何事情。与ID值混淆是可能的,但不建议。请参阅此处以获取更多信息:http://javalite.io/surrogate_primary_keys

+0

准备示例时,我想我注意到可能导致问题的原因。我的代码在保存模型之前设置属性,例如: public setClient(String id,String name) {client} = new Client(); \t client.setId(id); \t client.setName(name); client.save(); \t \t} \t 当这是一个新的客户端时,id参数为空(“”)而不是null。显然在以前的版本中,activejdbc理解为null或“”意味着插入新记录。现在只有当id为null时才会插入。这可以吗? – ccarvalho

+0

同样的逻辑依然如此。请看看它如何决定更新或插入:https://github.com/javalite/activejdbc/blob/365a98e8feb704f65c78f5a7416a02a9592b9a02/activejdbc/src/main/java/org/javalite/activejdbc/Model.java#L2583- L2583 – ipolevoy