Коллеги, добрый день!
Столкнулся с плавающей ошибкой при сохранении полей сущности типа UUID. Пока не могу определить из-за чего она возникает. Может кто-то уже сталкивался и знает как её избежать. Возникает при сохранении сущности с атрибутом типа UUID. В момент сохранения возникает Exception при конвертации типов. Ошибка возникает не всегда. Возникает после очередного перезапуска приложения. Лечится перезапуском. Но потом, после очередного перезапуска, снова проявляется. Наблюдаю её на БД HSQLDB в тестах и на тестовых контурах с БД Oracle. Ошибка возникает где-то в недрах библиотеки org.eclipse.persistence.core-2.7.9-6-jmix.jar
. Например, есть сущность с полем типа UUID:
@JmixEntity
@Entity(name = "cdi_InventoryItemULError")
@Table(name = "CDI_INVENTORY_ITEM_UL_ERROR")
public class InventoryItemULError {
@Column(name = "PARENT_ITEM_ID")
private UUID parentId;
}
Пример ошибки при сохранении такой сущности:
Exception [EclipseLink-3002] (Eclipse Persistence Services - 2.7.9.6-jmix): org.eclipse.persistence.exceptions.ConversionException
Exception Description: The object [9007dc94-8b43-d04e-e230-66409ee86fae], of class [class java.lang.String], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[parentId-->CDI_INVENTORY_ITEM_UL_ERROR.PARENT_ITEM_ID]] with descriptor [RelationalDescriptor(ru.psb.cdi.jmix.entity.ul.InventoryItemULError --> [DatabaseTable(CDI_INVENTORY_ITEM_UL_ERROR)])], could not be converted to [class java.util.UUID]
Вот StackTrace этой ошибки
Caused by: org.eclipse.persistence.exceptions.ConversionException:
at org.eclipse.persistence.exceptions.ConversionException.couldNotBeConverted(ConversionException.java:81)
at org.eclipse.persistence.internal.helper.ConversionManager.convertObject(ConversionManager.java:253)
at org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform.convertObject(DatasourcePlatform.java:226)
at org.eclipse.persistence.mappings.foundation.AbstractDirectMapping.getFieldValue(AbstractDirectMapping.java:798)
at org.eclipse.persistence.mappings.foundation.AbstractDirectMapping.writeFromObjectIntoRow(AbstractDirectMapping.java:1314)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildRow(ObjectBuilder.java:1608)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildRow(ObjectBuilder.java:1596)
at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:466)
at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:82)
at org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:92)
at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:316)
at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:60)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:911)
at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:810)
at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:110)
at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:87)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:3043)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1895)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1877)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1827)
at org.eclipse.persistence.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:229)
at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:128)
at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:4406)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1499)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithPreBuiltChangeSet(UnitOfWorkImpl.java:1645)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(RepeatableWriteUnitOfWork.java:457)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:979)