我试图将blob密钥放入实体的属性中,并且我收到以下错误:
/api/get/tmr
java.lang.IllegalArgumentException: The string property st has a value that is too long. It cannot exceed 500 characters.
我的代码是:
BlobKey k;
k=BlobUtil.pBE(d,DT,"st");
DT.setProperty("count",count);
Object O;
O = DT.getProperty("st");
String cl = O.getClass().getName();
String Cl = O.getClass().getCanonicalName();
log.info(" st property |"+DT.getProperty("st")+"|"+cl+"|"+Cl+"|");
datastore.put(DT);
错误来自最后一行:
TMComputation TMR: st property |<BlobKey: AD8BvulOBPut_iHAT4caaMyjl_X0qhnd5gT7IIP-UI-Q7wuY-XS2kuT1yzKWUo98M9YA5dld_3LG7CEAIER5La6x-Gz7zAAmnlGakhgHydkIFAujBYZ3ffRtya3ECcehqlHQDYdyqQVeS2ZmtbpfL4hUT3pTNiBCwJOIeFjO2qZGDycVSe_VJIddH87vuyH2R0ZrU_jxDtLEJ2pbtVaxnC96AS8BBSTzlKtNVjNilfNAUydmDwXqknmN4jOZLIPKhivUnv_ohEHjWo8J-CJsvHZcZQnqoIQBR9yF6JvWHWqxbkMDSvUkePAYXywcsziNn2t76dVh8jKnSGAQkU2FbufgMBKkSCASakcnpz76P8RHWn3VcYyflHQXLSXNLUmuiK-yPv9QR6NXGQ8Uyy2v4Bl9JzHP5v1PnzJDCc3Zwj9ytMeww7K_nyQuXJZw9J8oQpSitXSKmdqHVQHvbtSxFzZmlU59WyEwYgoW1ID0nRpiYwh30QrIXAQrm0AHdcN-ji_D44xSmP4dm3eFZQ2iglRz-71C_Wanbw7ZYmMrNge7qErHaemeIBXePWx5tLdN7jfaLBA2ho3V6_o2yI2dFseVxzGMfle23GTuSusvuzBA_DfJYFyFjVj0htMCbadMyr3UoP2umPHFPA-F-oD2o5i7tsLkjoIAWV5njbBsPtUYq3_66r1jomE3bbEYnV5KvnM4vEEyd2g_1_XCg-476vB9AaKoaxLQfZWPL5pLu5mIqXJYIcimUzOoxLH6deEmU08N7476CjjpouIMPdlRxCu_HBsf_0LMLrkQpuRmLxq5Z-lhtfEfYdAUFdSZfa-evaGw8EzVitAe1RaUrnbTv8p-TySJG-H4zrHslv-84PY4grKsNsCTALC0ogCFbCAmyplQikYGYG0Z08bq7RSDvBfcfKJwAcTHCkbkQ9aIId3nKP8LfNzTwR3DsofBrT5xcyJULZoARwktmT13-L_qUUHwtzz4Wt5Z7A>|com.google.appengine.api.blobstore.BlobKey|com.google.appengine.api.blobstore.BlobKey|
这表明st属性包含blob键而不是字符串。
答案 0 :(得分:1)
根据文档,如果您使用的是Java类型String
且值超过500个字符,则会抛出IllegalArgumentException。
对此的解决方法是使用文本字符串(长整数),即com.google.appengine.api.datastore.Text
而不是java.lang.String
。此数据类型可以保存高达1MB的信息,但请记住,它没有编入索引。
查看https://developers.google.com/appengine/docs/java/datastore/entities
上“属性和值类型”的文档