*/ -->
ラベル Datastore の投稿を表示しています。 すべての投稿を表示

データストアに対して部分一致(SQLのLIKEみたいな)検索をかける方法はないかと探してみたところSlim3 DatastoreのDatastore.filterInMemory()を使って、条件をmeta.{value}.contains(String)でやるのが唯一の手段っぽい。けどこの方法はデータストアに高い負荷がかかるので、検索フォームなどで利用する以外は、使用しないほうがいいと思う。

String search = "test";
EntityMeta meta = new EntityMeta();
List<Entity> list = Datastore.query(meta).filterInMemory(meta.title.contains(search)).asList();
link

この記事の続きを読む

データストアにエンティティを格納する際に以下のようなエラーが出た。

Class *** has multiple relationship fields of type ***

察するにデータストアに格納されるエンティティが保持できる同一の型の子エンティティが2つ以上あると吐くエラーみたい。少し古い記事だけど↓でも議論されてるみたい。

Google-App-Engine-Japan : 同一型の子Entityを持つと、子Entityの判断がつかない

実際以下のようなコードだとエラー吐く。

@Element(dependent = "true")
private List<TestEntity> newEntity = new ArrayList<TestEntity>(); @Element(dependent = "true")
private List<TestEntity> oldEntity = new ArrayList<TestEntity>();

上の例だとTestEntityを継承した空クラスを指定してもやっぱりエラー。

対処法は設定ファイルを書き換えるか、継承を使わないで中身が全く同じクラスをコピペ作成するか、っぽい。

jdoconfig.xml
<property name="datanucleus.appengine.multipleRelationsOfSameTypeAreErrors" value="false"/>

なんか設定ファイル弄って無理やり動かすのも癪なのでクラスを継承しないで作って解決。

link

この記事の続きを読む