Considering we have a custom Type we register like this:
{noformat}@Override protected void addConfigOptions(Map options) { options.put( EntityManagerFactoryBuilderImpl.METADATA_BUILDER_CONTRIBUTOR, (MetadataBuilderContributor) metadataBuilder -> metadataBuilder.applyTypes( (typeContributions, serviceRegistry) -> { typeContributions.contributeType( ArrayType.INSTANCE ); } )); }{noformat}
When calling the following query:
{code:java} List<CorporateUserDTO> emails = entityManager.createNativeQuery( "select " + " u.userName as userName, " + " u.emailAddresses as emailAddresses " + "from CorporateUser u " + "where u.userName = :name", "CorporateUserDTO" ) .setParameter( "name", "Vlad" ) .getResultList(); {code}
Where the emailAddresses uses a custom Typ and the {{CorporateUserDTO}} result set mapping is mapped like this:
{code:java} @SqlResultSetMapping( name = "CorporateUserDTO", classes = @ConstructorResult( targetClass = CorporateUserDTO.class, columns = { @ColumnResult(name = "userName"), @ColumnResult(name = "emailAddresses", type = Array.class), } ) ) {code}
The following exception is thrown:
{noformat} java javax . lang persistence . IllegalArgumentException PersistenceException : Could not locate appropriate constructor on class : org.hibernate. test. type. contributor.ArrayTypeContributorTest$CorporateUserDTO SerializationException: could not deserialize
at org.hibernate. loader internal . custom ExceptionConverterImpl . ConstructorResultColumnProcessor.resolveConstructor convert ( ConstructorResultColumnProcessor ExceptionConverterImpl .java: 92 154 ) at org.hibernate. loader query . custom internal . ConstructorResultColumnProcessor AbstractProducedQuery . performDiscovery list ( ConstructorResultColumnProcessor AbstractProducedQuery .java: 45 1542 ) at org.hibernate. loader query . custom Query . CustomLoader.autoDiscoverTypes getResultList ( CustomLoader Query .java: 494 165 ) at org.hibernate. loader test . Loader type . processResultSet contributor.ArrayTypeContributorTest.lambda$testNativeSQL$5 ( Loader ArrayTypeContributorTest .java: 2338 99 ) {noformat}
It looks like That’s because the Constructor {{Array}}property is resolved using the Hibernate Type by {{SerializableType}} instead of the actual Java Type {{ArrayType}} .
|
|