我在Play 2框架中使用Ebean。這兩個對我來說都很新。我有兩個型號Algorithm
和Solution
。 (一個Algorithm
可以擁有多個Solution
S)如果使用Ebean ManyToOne關係,數據庫表會是什麼樣子?
@Entity
public class Algorithm extends Model{
@Id
public Long id;
@Required
public String name;
public String description;
@OneToMany(mappedBy="algorithm", cascade=CascadeType.ALL)
public List<Solution> solutions;
...
}
而且
@Entity
public class Solution extends Model {
@Id
public Long id;
@Required
public String explanation;
public String code;
@ManyToOne (cascade=CascadeType.ALL)
public Algorithm algorithm;
// **** I added it because the error message said algorithm_id is missing!!
public Long algorithm_id;
...
}
我使用的sqlite3和兩個表的算法和解決方案的架構是:
CREATE TABLE algorithm(id INTEGER primary key, name varchar(255), description varchar(255));
而且
CREATE TABLE "solution"(id INTEGER primary key, explanation varchar(255), code varchar(255), algorithm_id INTEGER);
所以在我的Solution
模型中,我原本沒有public Long algorithm_id;
這一行。 問題是當我試圖創建一個新的Algorithm
實例時,播放框架抱怨我錯過了表solution
中的一列algorithm_id
。所以我手動在模型定義和數據庫表中添加了algorithm_id,以使錯誤消息消失。但是,似乎ebean的級聯保存並不像預期的那樣工作:algorithm_id列從未被ebean自動填充。它總是空的。換句話說,解決方案實體和算法實體不在數據庫中連接。
所以我的問題是:
我應該在手動模式和數據庫中添加algorithm_id?如果沒有,如何自動生成algorithm_id?
我的模型和db表格模式在我的情況下應該是什麼樣子?
謝謝。
你實際上可以讓Ebean生成整個模式。只需創建空數據庫並啓動應用程序。當您在瀏覽器中打開它時,Play會爲您提供執行進化腳本以升級您的數據庫並創建所有缺失的表格。如果你不使用任何遺留的數據庫結構,你可以在模型上工作,Play將同步數據庫結構。 –
@IgorRomanov謝謝,我會嘗試,讓你知道會發生什麼。我禁用了進化,因爲它似乎不適用於sqlite3。請參閱http:// stackoverflow。COM /問題/ 15733941 /錯誤-SQL腳本生成換的SQLite數據庫按ebean合的播放框架。你碰巧知道答案嗎? – ChuanRocks