Ignite dialect creates QueryEntity types as Ignite UUIDs

Description

This affects current master branch, introduced by https://github.com/hibernate/hibernate-ogm-ignite/pull/18/.

In IgniteInitializer, a few special cases are matched and handled. UUID case is missing from those.
https://github.com/hibernate/hibernate-ogm-ignite/blob/master/ignite/src/main/java/org/hibernate/ogm/datastore/ignite/impl/IgniteCacheInitializer.java#L271

In the OGM docs at https://docs.jboss.org/hibernate/ogm/5.4/reference/en-US/html_single/#ogm-mapping-supported-types
It says "UUID stored as described by RFC 4122" which I'm assuming means the string form of the UUID.

I think as a consequence of this, hibernate-ogm-core ends up selecting `StringMappedGridTypeDescriptor` and this does a `toString` on the UUID object before passing it to the underlying store.

Apache Ignite supports UUIDs natively and since the ignite initializer sets the query entity's type to java.util.UUID, Ignite's GridH2RowDescriptor attempts to cast the incoming object to a UUID but this of course has been turned to a string by the StringMappedGridTypeDescriptor.

The end result is a ClassCastException. I don't know the internals of OGM (or OGM-ignite) but from the looks of everything else in that initializer I assumed adding an exception for UUIDs was the way forward.

I'm presuming OGM in general converts the UUID to a string so that there is a consistent representation for UUIDs regardless of the backing store, if so perhaps there's no way to take advantage of Ignite's native UUID support.

I've attached a stacktrace from when this happens and a patch adding the exception I mentioned. Feel free to use/apply it or implement another solution.

Environment

None

Assignee

Unassigned

Reporter

Courtney Robinson

Labels

None

Feedback Requested

None

Feedback Requested By

None

backPortable

None

Suitable for new contributors

None

Pull Request

None

backportDecision

None

backportReEvaluate

None

Components

Priority

Blocker
Configure