悪あがきプログラマー

悪あがきを続けていきたい技術と書評なブログです。トレタでiOSエンジニアやってます。

ModelMetaが見つからない。

slim3の新機能Datasoreを試していたら、こんなエラーが。

HTTP ERROR: 500

The meta data of the model(todo.model.Exam) is not found.
RequestURI=/admin/eleaning/regist/insert

Caused by:

java.lang.IllegalArgumentException: The meta data of the model(todo.model.Exam) is not found.
	at org.slim3.datastore.Datastore.createModelMeta(Datastore.java:1789)
	at org.slim3.datastore.Datastore.getModelMeta(Datastore.java:1768)
	at org.slim3.datastore.Datastore.put(Datastore.java:1285)

modelをコンパイルし直しても解決せず。
ModelMetaはAPTで自動生成だからコーディングミスってこともないし、
でも、一応確認ということで生成されたModelMetaを見てると、
あらら、Eclipseにエラーの赤マークが・・・
f:id:y_koh:20091019100636j:image
なんだか、クラスが閉じてない?
そんなバカな!と思いつつ、
他のModelMetaと比較してみると、getKey()するところから出力されてない。

    @Override
    protected com.google.appengine.api.datastore.Entity modelToEntity(java.lang.Object model) {
        todo.model.Option m = (todo.model.Option) model;
        com.google.appengine.api.datastore.Entity entity = null;
        // ここ以下が出力されてない
        if (m.getKey() != null) {
            entity = new com.google.appengine.api.datastore.Entity(m.getKey());
        } else {
            entity = new com.google.appengine.api.datastore.Entity("Option");
        }

ModelMetaの元になるModelを見直してみると、
なんと、アクセッサーが足りてない。
keyのアクセッサーを書いてコンパイルし直したらちゃんとしたModelMetaが作成された。


う〜ん、アクセッサーを書き忘れたのは自分だけど、エラークラスが勝手に作成されてしまうのはなぁ。。
かといって、これでクラスがちゃんと閉じられていたら後でもっと嵌ってたんだろうなぁ。
APTでの生成に失敗した時点でユーザーに通知するような仕組があるといいんだけど。


と、思ってたらProblemsにちゃんと出てたよ。。