非持久对象上的 ActiveJDBC UniquenessValidator
ActiveJDBC UniquenessValidator on non-persisted objects
我有以下型号:
Car (
id INT(11) NOT NULL AUTO_INCREMENT,
name TEXT
)
..
public class Car extends Model {
static{
validatePresenceOf("name");
validateWith(new UniquenessValidator("name"));
}
public Car() {}
}
在此模型中,我将所有汽车的名称指定为唯一的。
运行 以下代码不会在第二个实例中引发验证错误:
Car acura_1 = new Car();
acura_1.set("name","Acura");
acura_1.saveIt();
Car acura_2 = new Car();
acura_2.set("name","Acura");
acura_2.saveIt(); // << surprisingly, this works!
//acura_2.isValid();
我原以为 acura_2.saveIt()
会出现验证异常,因为名称 "Acura" 在 table 汽车中已经是 taken/present(即当 acura_1 被坚持了)。
查看 UniquenessValidator 的代码,如果我没记错的话,唯一性的验证似乎考虑到了模型的 id。
如果执行最后一行注释 (acura_2.isValid()
),则错误消息出现在 acura_2 上:名称 -> 应该是唯一的。
我想知道为什么 UniquenessValidator 只对持久对象有效?
你是对的,这个验证器不是最好的。此问题已修复:https://github.com/javalite/activejdbc/issues/572 and JavaDoc added for UniquenessValidator
一般来说,我不建议在生产系统中使用这个验证器,因为它实际上并不能保证唯一性。请参阅 JavaDoc 以获取参数。
我有以下型号:
Car (
id INT(11) NOT NULL AUTO_INCREMENT,
name TEXT
)
..
public class Car extends Model {
static{
validatePresenceOf("name");
validateWith(new UniquenessValidator("name"));
}
public Car() {}
}
在此模型中,我将所有汽车的名称指定为唯一的。
运行 以下代码不会在第二个实例中引发验证错误:
Car acura_1 = new Car();
acura_1.set("name","Acura");
acura_1.saveIt();
Car acura_2 = new Car();
acura_2.set("name","Acura");
acura_2.saveIt(); // << surprisingly, this works!
//acura_2.isValid();
我原以为 acura_2.saveIt()
会出现验证异常,因为名称 "Acura" 在 table 汽车中已经是 taken/present(即当 acura_1 被坚持了)。
查看 UniquenessValidator 的代码,如果我没记错的话,唯一性的验证似乎考虑到了模型的 id。
如果执行最后一行注释 (acura_2.isValid()
),则错误消息出现在 acura_2 上:名称 -> 应该是唯一的。
我想知道为什么 UniquenessValidator 只对持久对象有效?
你是对的,这个验证器不是最好的。此问题已修复:https://github.com/javalite/activejdbc/issues/572 and JavaDoc added for UniquenessValidator
一般来说,我不建议在生产系统中使用这个验证器,因为它实际上并不能保证唯一性。请参阅 JavaDoc 以获取参数。