読者です 読者をやめる 読者になる 読者になる

GAEでIllegalArgumentExceptionが発生した

例外の内容

java.lang.IllegalArgumentException: String properties must be 500 characters or less.  Instead, use com.google.appengine.api.datastore.Text, which can store strings of any length.
	at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue(DataTypeUtils.java:121)
	at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:103)
	at com.google.appengine.api.datastore.Entity.setProperty(Entity.java:257)

原因

EntityのプロパティをString型で定義していて、保存するサイズが500文字を超えたからエラーになった

対応

String型ではなくcom.google.appengine.api.datastore.Text型を使う。
注意点 Text型はインデックスの対象にならないのでIndexとして使用したい場合は別の方法を考える必要がある。
単純に完全一致しているかだけを把握するためにインデックスが必要なら別途検索用のプロパティを作成しハッシュ値を入れる。検索時はこの検索用プロパティを検索条件にする。
このようにGAE/Jでは検索用のプロパティを作成することは結構あると思う。範囲検索とかも基本できないので範囲用のプロパティを作成する。(1〜5000の範囲フラグ,5001〜10000の範囲フラグetc)