假设我有以下数据库模型:
Car(
id INT
plaque_id INT
)
Plaque(
id INT
identification TEXT
)
所以在ActiveJDBC中,我的模型是:
public class Car extends Model {
static{
validatePresenceOf("plaque_id");
}
public Car () {}
}
...
public class Plaque extends Model {
static{
validatePresenceOf("identification");
}
public Car () {}
}
假设我的规格说:汽车必须有牌匾。
正如您所看到的,我正在对Car模型强制执行plaque_id。
现在。当我尝试这个时:
Car model_s = new Car();
Plaque plaque_a = new Plaque();
plaque_a.set("identification","A-8000");
plaque_a.saveIt();
car.add(plaque_a);
car.saveIt();
我抛出了以下异常:
java.lang.IllegalArgumentException:您只能添加关联的模型 到DB中存在的实例。首先保存此实例,然后保存 将能够添加依赖项。
如果我理解正确,我的汽车 model_s 必须首先保存才能链接牌匾 plaque_a 。但由于我的验证规则,我无法保存 model_s 而没有牌匾。这是一个捕获22。
注意:我是activeJDBC的新手。
答案 0 :(得分:0)
我认为你倒退了。由于您的表Car
有一列plaque_id
,这意味着Plaque
有许多Car
(s),这是一对多关联:{{3 }}。
因此,您需要将Car
添加到Plaque
,而不是相反:
Car model_s = new Car(); // set parameters on the car
plaque_a.set("identification","A-8000");
plaque_a.saveIt();
plaque_a.add(model_s);
其他建议:
1)在Java中,使用CamelCase:modelS
,而不是model_s
2)将构造函数添加到Plaque
:
public class Plaque{
public Plaque(String identification){
set("identification", identification);
}
public Plaque(){} // must have default constructor
}
然后你的代码看起来更干净:
Car model_s = new Car(); // set parameters on the car
Plaque plaque = new Plaque("A-8000");
plaque_a.saveIt();
plaque_a.add(modelS);
一般来说,尽量避免使用动态setter和getter,它们对于一个小项目是可以的,但是http://javalite.io/one_to_many_associations会让你获得Java重构的惊人能力,这是Ruby中没有的。