【发布时间】:2015-11-16 15:22:35
【问题描述】:
我有一个表,其中定义了一个 ID 字段:
create table XXX (
id uuid primary key,
name varchar,
....
而我的班级 XXX 是这么注释的:
public class XXX {
@PrimaryKey
@Persistent(customValueStrategy = "uuid")
public UUID id;
...
当尝试发出 PersistenceManager.makePersistent() 时,我得到:
线程“主”javax.jdo.JDOFatalInternalException 中的异常:为字段 XXX.id 生成的 Id 无效,id:54e5abde-732b-42ff-af92-06af89af46ff 在 org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:673) 在 org.datanucleus.api.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:720) 在 org.datanucleus.api.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:740) 在 Importer.save(StayImporter.java:84) 在 Importer.exec(StayImporter.java:102) 在 Importer.main(Importer.java:110) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) NestedThrowablesStackTrace: 为字段 XXX.id 生成的 Id 无效,id:54e5abde-732b-42ff-af92-06af89af46ff org.datanucleus.exceptions.NucleusException:为字段 XXX.id 生成的 Id 无效,id:54e5abde-732b-42ff-af92-06af89af46ff 在 org.datanucleus.store.AbstractStoreManager.getStrategyValue(AbstractStoreManager.java:1300) 在 org.datanucleus.state.StateManagerImpl.populateStrategyFields(StateManagerImpl.java:2201) 在 org.datanucleus.state.StateManagerImpl.initialiseForPersistentNew(StateManagerImpl.java:418) 在 org.datanucleus.state.StateManagerImpl.initialiseForPersistentNew(StateManagerImpl.java:120) 在 org.datanucleus.state.ObjectProviderFactoryImpl.newForPersistentNew(ObjectProviderFactoryImpl.java:218) 在 org.datanucleus.ExecutionContextImpl.persistObjectInternal(ExecutionContextImpl.java:2078) 在 org.datanucleus.ExecutionContextImpl.persistObjectWork(ExecutionContextImpl.java:1922) 在 org.datanucleus.ExecutionContextImpl.persistObject(ExecutionContextImpl.java:1777) 在 org.datanucleus.api.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:715) 在 org.datanucleus.api.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:740)
UUID 在我看来不错,为什么不起作用?
Maven 是:
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-accessplatform-jdo-cassandra</artifactId>
<version>4.2.1</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>2.1.9</version>
</dependency>
Cassandra 版本是 2.2.3
【问题讨论】:
-
我原以为所有的生成器通常都是基于字符串或整数的。如果将该字段设为字符串会发生什么?这也不是真正的例外......将被嵌套
-
我已经包含了嵌套异常
-
使用字符串字段,我得到:org.datanucleus.exceptions.NucleusException: Invalid Id generated for XXX.id, id : 7aa194c8-06d2-491f-9ccb-4e52db36dd0a
-
使用带有“uuid”生成的字符串字段没有问题
-
你能显示一些代码吗?
标签: java cassandra uuid datanucleus