1

Play 2 フレームワークで Ebean を使用しています。どちらも私にとってはまったく新しいものです。と の 2 つのモデルがAlgorithmありSolutionます。(Algorithmは複数Solutionの を所有できます。)

@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を使用しており、2つのテーブルのアルゴリズムとソリューションのスキーマは次のとおりです。

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;問題は、新しいインスタンスを作成しようとしたときに、play フレームワークが tableAlgorithmの列が見つからないと不平を言ったことです。そのため、モデル定義と db テーブルの両方に手動で algorithm_id を追加して、エラー メッセージが表示されないようにしました。ただし、ebean のカスケード保存が期待どおりに機能していないようです。algorithm_id 列は、ebean によって自動的に埋められることはありません。いつも空いています。つまり、ソリューションエンティティとアルゴリズムエンティティはデータベースで接続されていません。algorithm_idsolution

だから私の質問は:

  1. モデルとデータベースに手動で algorithm_id を追加する必要がありますか? そうでない場合、algorithm_id を自動的に生成するにはどうすればよいですか?

  2. 私の場合、モデルとデータベース テーブル スキーマはどのように見えるべきですか?

ありがとう。

4

1 に答える 1