我最近开始使用ActiveJDBC。我有以下表格(postgresql):
CREATE TABLE users (
id uuid PRIMARY KEY,
email text UNIQUE NOT NULL,
password text,
<some more nullable columns>
created_at timestamp with time zone NOT NULL default (now() at time zone 'utc'),
updated_at timestamp with time zone
);
如您所见,主键的类型为uuid,没有任何自动生成的值。
这是我的用户类,用于建模表格:
public class User extends Model
{
public User() {
setId(UUID.randomUUID()); // sets value to primary key
}
...
}
这是我尝试创建并插入新行的代码片段:
User u = new User();
System.out.println(u.saveIt());
实际上,我希望插入操作失败,因为我没有为必填的电子邮件列设置任何值。然而,我只是得到了false作为返回值。当我打开日志记录时,我看到框架生成了一个更新SQL语句,而不是插入操作:
[main] INFO org.javalite.activejdbc.DB - Query: "UPDATE users SET email = ?, ..., updated_at = ? WHERE id = ?", with parameters: <null>, <null>, <null>, <null>, <null>, <null>, <null>, <2016-01-07 17:30:46.025>, <0621fbdb-5b95-4ee7-a474-8ee9165e2982>, took: 1 milliseconds
我看了一下org.javalite.activejdbc.Model
类中的save()
方法,并看到了以下代码:
if (getId() == null) {
result = insert();
} else {
result = update();
}
这是否意味着必须为空才能生成插入?如果是这样,那就无法接受了,所以我一定漏掉了什么。