存储对实体中Blob的引用

时间:2014-01-17 00:01:42

标签: java google-app-engine

我试图将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键而不是字符串。

1 个答案:

答案 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

上“属性和值类型”的文档