Skip to content

Retrieve single column of type byte array fails #3757

@MikePryadko

Description

@MikePryadko

Expected Behavior

Success retrieve one column of type byte[]

Actual Behaviour

Micronaut tries map array to single byte and throws exception

Steps To Reproduce

  1. Use Micronaut 4.10.9
  2. Create table:
CREATE TABLE customers (
    id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    dek BYTEA NOT NULL
);
  1. Create entity:
@MappedEntity("customers")
public record CustomerEntity(
        @Id
        @GeneratedValue
        Long id,
        byte[] dek
) {}
  1. 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);
}
  1. 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)
  1. Change methods return type:
    @Query("SELECT dek FROM customers WHERE id = :id")
    byte[] findDekById(long id);
  1. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    type: bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions