SyntaxHighlighter

2011年7月7日木曜日

【備忘録】Slim3のModelRefでクエリ

ModelRefで問い合わせしたいなーと思い、ネットの海を彷徨ってみつけた情報。
とってもこれ貴重やわぁ。。。助かります。

そんなわけで備忘録。

参考サイト:ふじやん雑記帳さん
※中断から下あたりにある「ModelRefで問い合わせ」

ModelRefで問い合わせ

  • ModelRefAttributeMetaを使えば、ModelRefで問い合わせが可能
  • 例えば、部署(1)対従業員(多)の場合、
// 部署
@Model(schemaVersion = 1)
public class Dept implements Serializable {
}

// 従業員
@Model(schemaVersion = 1)
public class Employee implements Serializable {
    private ModelRef<dept> deptRef = new ModelRef<dept>(Dept.class);
    
    public ModelRef<dept> getDeptRef() {
        return deptRef;
    }
}
とある場合に、「ある部署に所属する従業員全員」という問い合わせは下記のコードで可能。
Key deptKey = [ある部署のKey];

EmployeeMeta employeeMeta = new EmployeeMeta();
ModelRefAttributeMeta<employee, ModelRef<Dept>, Dept> refMeta = employeeMeta.deptRef;
List<employee> list = Datastore.query(Employee.class).filter(refMeta.equal(deptKey));
  • これを使えば、親子関連を持たせたい場合に、entityGroupを使わなくても良い。

2 件のコメント:

  1. 参照整合性が必要な場合は、EntityGroupを使わないならアプリケーション側で実装する必要がありそうでうす。

    http://www.tdtsh.com/blog/archives/818

    返信削除
  2. お。
    「org.slim3.datastore.EntityNotFoundRuntimeException」
    がきたときの処理ってことですかね。
    約束事として徹底せんとしょうがないかなぁ

    返信削除