EBeanでOneToManyなリレーション

発端

PlayFramework2 with Javaを試していて、DBとの接続にEBeanを使っている。
ORMをちゃんと使うのは初めてなので練習的に。
基礎的な使用方法はいろんなサイトに乗っているのだけど、
ちょっと変?な使い方をしようとすると資料が少なくなる。

OneToManyなリレーション

Routeが複数のPinを持っている場合

Route側のモデル

@Entity
public class Route extends Model{
    @Id
    public long id;

    @Required
    public String name;

    public String memo;

    @Valid
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "route")
    public List<Pin> pins = new ArrayList<>();
    
}

Pin側のモデル

@Entity
public class Pin extends Model{
    @Id
    public long pin_id;

    public String memo;

    @ManyToOne
    @JoinColumn(name = "route_id")
    public Route route;

    public long lat;
    public long lng;
  
}

とするのが正解っぽい。

Routeモデル

    @Valid
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "route")
    public List<Pin> pins = new ArrayList<>();

@Valid
リレーション先もValidate対象にするアノテーション
@OneToMany(cascade = CascadeType.ALL, mappedBy = "route")
1:多のリレーション、親の方につける。
mappedByプロパティには、子のモデルの親を指すフィールド名を指定。  

Pinモデル

    @ManyToOne
    @JoinColumn(name = "route_id")
    public Route route;

@ManyToOne
多:1のリレーション、子の方につける。
@JoinColumn(name = "route_id")
親との結合に使用するカラム名かな?  
しばらくできなかった時は、ManyToOneアノテーションだけにしていたからのようだ。

    @ManyToOne(cascade= CascadeType.ALL)
    public Route route;

cascade= CascadeType.ALL
これをつけることで、リレーション先にも変更を行うそう。
例えば

Route route = Route.findById(1);
Pin pin = route.pins.get(0);
pin.delete();

とかすると、Routeまで削除されちゃう。

今日はここまで。