如何在 JPA 实体(不是 JDO)中将 id 字段声明为“作为编码字符串的键”以在 GAE 数据存储中使用?您可以找到JDO的示例,但找不到 JPA 的示例。
只要在子父关系中使用实体,就不能声明 id 字段。
所以,我的实体是这样的:
@Entity
public class EntityClass {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String id;
因此,它同时使用 JPA 和 JDO 注释。
因此,在尝试持久化实体对象时,我遇到了一个异常:
如果字段未编码且为字符串类型,则不能有空主键字段。请提供一个值,或者,如果您希望数据存储区代表您生成一个 id,请将字段的类型更改为 Long。org.datanucleus.store.appengine.FatalNucleusUserException:name.xxx.tips.db.User 的主键无效。如果字段未编码且为字符串类型,则不能有空主键字段。请提供一个值,或者,如果您希望数据存储区代表您生成一个 id,请将字段的类型更改为 Long。
完整堆栈跟踪:如果字段未编码且类型为字符串,则不能有空主键字段。请提供一个值,或者,如果您希望数据存储区代表您生成一个 id,请将字段的类型更改为 Long。org.datanucleus.store.appengine.FatalNucleusUserException:name.xxx.tips.db.User 的主键无效。如果字段未编码且为字符串类型,则不能有空主键字段。请提供一个值,或者,如果您希望数据存储区代表您生成一个 id,请将字段的类型更改为 Long。在 org.datanucleus.store.appengine.DatastoreFieldManager.storeStringPKField(DatastoreFieldManager.java:540) 在 org.datanucleus.store.appengine.DatastoreFieldManager.storeStringField(DatastoreFieldManager.java:460) 在 org.datanucleus.state.AbstractStateManager.providedStringField(AbstractStateManager .java: