我在 Play 2 框架中使用 Ebean。两者对我来说都很新。我有两个模型Algorithm
和Solution
. (一个Algorithm
可以拥有多个Solution
s。)
@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
实例时,播放框架抱怨我错过了 table 中的一algorithm_id
列solution
。所以我在模型定义和数据库表中手动添加了 algorithm_id 以使错误消息消失。但是,ebean 的级联保存似乎没有按预期工作:algorithm_id 列永远不会被 ebean 自动填充。它总是空的。换句话说,解决方案实体和算法实体在数据库中没有连接。
所以我的问题是:
我应该在模型和数据库中手动添加 algorithm_id 吗?如果没有,如何使 algorithm_id 自动生成?
在我的情况下,我的模型和数据库表模式应该是什么样的?
谢谢。