Expected Behavior
Success retrieve one column of type byte[]
Actual Behaviour
Micronaut tries map array to single byte and throws exception
Steps To Reproduce
- Use Micronaut
4.10.9
- Create table:
CREATE TABLE customers (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
dek BYTEA NOT NULL
);
- Create entity:
@MappedEntity("customers")
public record CustomerEntity(
@Id
@GeneratedValue
Long id,
byte[] dek
) {}
- Create repository
@JdbcRepository(dialect = Dialect.POSTGRES)
public interface CustomerRepository extends CrudRepository<CustomerEntity, Long> {
@Query("SELECT dek FROM customers WHERE id = :id")
Optional<byte[]> findDekById(long id);
}
- Try to use and get error:
Caused by: io.micronaut.data.exceptions.DataAccessException: Cannot convert type [class [B] with value [[B@4d23b0d7] to target type: class java.lang.Byte. Consider defining a TypeConverter bean to handle this case.
at io.micronaut.data.runtime.mapper.ResultReader.lambda$convertRequired$0(ResultReader.java:51)
at java.base/java.util.Optional.orElseThrow(Optional.java:403)
at io.micronaut.data.runtime.mapper.ResultReader.convertRequired(ResultReader.java:50)
at io.micronaut.data.runtime.operations.internal.sql.AbstractSqlRepositoryOperations$4.map(AbstractSqlRepositoryOperations.java:810)
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.findOne(DefaultJdbcRepositoryOperations.java:380)
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.lambda$findOne$0(DefaultJdbcRepositoryOperations.java:354)
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.lambda$executeRead$23(DefaultJdbcRepositoryOperations.java:820)
at io.micronaut.data.connection.support.AbstractConnectionOperations.executeWithNewConnection(AbstractConnectionOperations.java:174)
- Change methods return type:
@Query("SELECT dek FROM customers WHERE id = :id")
byte[] findDekById(long id);
- Try to use and get another error:
Caused by: io.micronaut.data.exceptions.DataAccessException: Error executing SQL Query: SELECT dek FROM customers WHERE id = ? Error reading object for index [1] from result set: Bad value for type byte : \x0b215bc7ee274afebb1997414b5687ec09835ebe67905876acd8e67d9ae97b64
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.findAll(DefaultJdbcRepositoryOperations.java:403)
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.lambda$findAll$5(DefaultJdbcRepositoryOperations.java:558)
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.lambda$executeRead$23(DefaultJdbcRepositoryOperations.java:820)
at io.micronaut.data.connection.support.AbstractConnectionOperations.executeWithNewConnection(AbstractConnectionOperations.java:174)
at io.micronaut.data.connection.support.AbstractConnectionOperations.execute(AbstractConnectionOperations.java:114)
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.executeRead(DefaultJdbcRepositoryOperations.java:817)
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.findAll(DefaultJdbcRepositoryOperations.java:558)
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.findAll(DefaultJdbcRepositoryOperations.java:145)
Environment Information
- Ubuntu 24.04.1
- openjdk 21.0.10 2026-01-20
- PostgreSQL 18.3
Example Application
No response
Version
4.10.9
Expected Behavior
Success retrieve one column of type
byte[]Actual Behaviour
Micronaut tries map array to single byte and throws exception
Steps To Reproduce
4.10.9Environment Information
Example Application
No response
Version
4.10.9