2017-04-07 52 views
0

假设我有以下DB模式:在activeJDBC,怎么执行的一个一对多的关系存在于模型

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异常:您只能添加相关模型 以存在于数据库的实例。先保存这个实例,然后你 将能够添加依赖关系。

如果我理解正确的话,我的车model_s必须首先能够链接斑块plaque_a前保存。但由于我的验证规则,我无法保存model_s没有牙斑。这是一个捕获 - 22。

注:我是activeJDBC的新手。

回答

0

我认为你已经倒退了。由于您的表Car有一列plaque_id,这意味着Plaque有许多Car(s),这是一对多关联:http://javalite.io/one_to_many_associations

因此,你需要添加CarPlaque,而不是周围的其他方式:

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中,使用驼峰: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); 

一般情况下,尽量避免动态getter和setter方法,他们是一个小项目确定,但writing permanent setters and getters将让你的Java重构的一个惊人的力量,是你做没有在Ruby中。

相关问题