如何在GAA Datastore中將JPA實體(非JDO)中的id字段聲明爲「Key as encoded String」?您可以找到JDO的示例,但不能用於JPA。使用JPA for GAE自動生成的id(鍵爲編碼字符串)
只要在子 - 父關係中使用實體,就不能聲明id字段。
所以,我的實體是這樣的:
@Entity
public class EntityClass {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String id;
因此,它同時使用JPA和JDO註解。
所以,試圖堅持實體對象我得到一個例外:
不能有一個空的主鍵字段如果字段爲未編碼和String類型。請提供一個值,或者,如果您希望數據存儲以您的名義生成一個id,請將該字段的類型更改爲Long。 org.datanucleus.store.appengine.FatalNucleusUserException:name.xxx.tips.db.User的主鍵無效。如果字段未經編碼且字符串類型不能爲空主鍵字段。請提供一個值,或者,如果您希望數據存儲以您的名義生成一個id,請將該字段的類型更改爲Long。
Full Stacktrace: 如果字段未經編碼且字符串類型不能爲空主鍵字段。請提供一個值,或者,如果您希望數據存儲以您的名義生成一個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。 provided.tringField(AbstractStateManager.java:1023) at name.xxx.tips.db.User.jdoProvideField(User.java) at name.xxx.tips.db.User.jdoProvideFields(User.java) at org.datanucleus。 state.JDOStateManagerImpl.provideFields(JDOStateManagerImpl.java:2715) 在org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPreProcess(DatastorePersistenceHandler.java:357) 在org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects(DatastorePersistenceHandler.java: 2 67) 在org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject(DatastorePersistenceHandler.java:256) 在org.datanucleus.state.JDOStateManagerImpl.internalMakePersistent(JDOStateManagerImpl.java:3185) 在org.datanucleus.state.JDOStateManagerImpl。齊平(JDOStateManagerImpl.java:4513) 在org.datanucleus.state.JDOStateManagerImpl.getExternalObjectId(JDOStateManagerImpl.java:1334) 在org.datanucleus.state.JDOStateManagerImpl.getObjectId(JDOStateManagerImpl.java:1234) 在name.xxx。 tips.db.User.jdoGetObjectId(User.java) 在org.datanucleus.jpa.JPAAdapter.getIdForObject(JPAAdapter.java:266) 在org.datanucleus.ObjectManagerImpl.exists(ObjectManagerImpl.java:1953) 在有機datanucleus.jpa.Ent ityManagerImpl.refresh(EntityManagerImpl.java:469)
實體使用[maven插件](http://www.datanucleus.org/products/datanucleus/enhancer.html#maven)進行了增強,並且指定了 JPA 配置參數。根據日誌增強成功完成。 JPA和JDO註釋(和增強字段)都在.class文件 –
4ntoine