ActiveJDBC UniquenessValidator对非持久对象

时间:2017-04-10 15:52:14

标签: activejdbc

我有以下型号:

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_1持续存在时)。

查看UniquenessValidator的代码,如果我没有弄错的话,看起来唯一性的验证会考虑模型的ID。

如果执行了最后一个注释行(acura_2.isValid()),则acura_2上会出现错误消息:name - &gt;应该是独一无二的。

我想知道UniquenessValidator如何仅对持久化对象起作用?

1 个答案:

答案 0 :(得分:0)

你是对的,这个验证器不是最好的。此问题已修复:https://github.com/javalite/activejdbc/issues/572并为UniquenessValidator添加了JavaDoc

一般来说,我不建议在生产系统中使用此验证器,因为它实际上并不保证唯一性。请参阅JavaDoc了解参数。