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 {{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}javax.persistence.PersistenceException: org.hibernate.type.SerializationException: could not deserialize
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154) at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1542) at org.hibernate.query.Query.getResultList(Query.java:165) at org.hibernate.test.type.contributor.ArrayTypeContributorTest.lambda$testNativeSQL$5(ArrayTypeContributorTest.java:99){noformat}
That’s because the {{Array}}property is resolved by {{SerializableType}} instead of {{ArrayType}}.
|
|