2017-04-07 48 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中。

相關問題