Closed rorychatterton closed 7 months ago
Adding a Custom Hibernate JavaType fixed it.
This is unexpected, as it isn't mentioned in the Micronaut Data Docs for custom types. Should Micronauts Typedef annotation and AOT Compilation wrap and apply these annotations / add this code on behalf of the customer when using Micronaut Data w' Hibernate?
Edit: On re-review of the documentation, it appears that the TypeDef is only guaranteed to work within the context of Micronaut Data JDBC and provides no guarantees to work with JPA more broadly. My issues seem to be as a result of proxying and other features that aren't supported by Micronaut Data JDBC/R2JDBC.
@Id
@JdbcTypeCode(SqlTypes.UUID)
@JavaType(WrapperIDDataType::class) // <- This
var id: WrapperID = WrapperID()
class WrapperIDDataType: AbstractClassJavaType<WrapperID>(WrapperID::class.java) {
override fun <X : Any?> unwrap(value: WrapperID?, clazz: Class<X>?, options: WrapperOptions?): X {
return UUIDJavaType.INSTANCE.unwrap(value?.toUUID(), clazz, options)
}
override fun <X : Any?> wrap(value: X?, options: WrapperOptions?): WrapperID? {
return value
?.let { UUIDJavaType.INSTANCE.wrap(value, options) }
?.let { WrapperID(it, "PREFIX") }
}
}
When using a custom type annotated with Typedef, JPA Hibernate Repository queries that return more than one object throws
Unwrap strategy not known for this Java type
errors.This error does not appear to occur with get/save/update/delete.
Expected Behavior
When running queries like
repository.findAll()
, custom types should be properly deserialised from the database using the Micronaut Data Attribute Converter.Actual Behaviour
Error message when running
repository.findAll()
:Steps To Reproduce
Please find this repository to reproduce the error.
Entity:
WrapperID
Converter
Environment Information
Example Application
https://github.com/rorychatterton/micronaut_data_error_reproduction
Version
4.3.1