2015-11-16 5 views
0

У меня есть таблица с полем ID, определенной таким образом:не может сохраняться Кассандре с DataNucleus на UUID

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: 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 (Импортер .java: 110) на sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) на sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:497) at com.intellij.rt.execution.application.AppMain.main (AppMain.java:144) NestedThrowablesStackTrace: Неверный идентификатор, сгенерированный для поля XXX .id, id: 54e5abde-732b-42ff-af92-06af89af46ff org.datanucleus.exceptions.NucleusException: Неверный идентификатор, сгенерированный для поля XXX.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) в орг .datanucleus.state.StateManagerImpl.initialiseForPersistentNew (StateManage rImpl.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 выглядит хорошо для меня, почему d oes это не работает?

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

+0

Я бы подумал, что все генераторы, как правило, основаны на строках или целых числах. Что произойдет, если вы сделаете это поле строкой? Также это не реальное исключение ... будет вложенным –

+0

Я включил вложенное исключение –

+0

С строковым полем я получаю: org.datanucleus.exceptions.NucleusException: Неверный идентификатор, сгенерированный для XXX.id, id: 7aa194c8 -06d2-491f-9ccb-4e52db36dd0a –

ответ

0

Посмотреть этот форум пост: http://www.datanucleus.org/servlet/forum/viewthread_thread,7922_lastpage,yes#lastpost

Выдержка из связанного содержания:

"UUIDGenerator" генерирует строк ,Следовательно, вы не можете использовать его для генерации значений UUID с выпущенным кодом. Ночные сборки добавляют поддержку для преобразования генерируемого String значения в любой из TimeZone, Locale, UUID, Currency, поэтому с этим нужно работать.

Запрет на то, что вы можете легко получить код и создать свой собственный плагин ValueGenerator, который расширяет AbstractGenerator для создания объектов UUID.

+0

Я думаю, что DataNucleus 4.1.7/4.2.2, который они выпустили вчера, имеет такое изменение, поэтому должно работать из коробки на них. Предложите проверить –