我将 Micronaut Data JDBC 1.1.3 与 MySQL 8.0 数据库一起使用。我想让我的id
列使用BINARY(16)
存储并使用 BIN_TO_UUID()/UUID_TO_BIN() 来转换值。我虽然可以使用 Micronaut Data 来做到这一点@ColumnTransformer
,如下所示:
public class User {
@Id
@ColumnTransformer(read = "BIN_TO_UUID(user_.id)", write = "UUID_TO_BIN(?)")
private UUID id;
// ...
}
然后我使用这样的 UserRepository:
@JdbcRepository(dialect = Dialect.MYSQL)
public interface UserRepository extends RxJavaCrudRepository<User, UUID> {
}
它的效果很好,因为该id
列在查询结果中被正确转换。但是当我尝试通过 ID 查找某些内容时,使用userRepository.findById(id).toSingle()
,我得到一个错误(“MaybeSource 为空”),我可以在跟踪输出中看到它没有转换值:
15:17:04.878 [pool-1-thread-76] DEBUG io.micronaut.data.query - Executing Query: SELECT BIN_TO_UUID(user_.id) AS id,user_.`username` FROM `user` user_ WHERE (user_.`id` = ?)
这是预期的吗?还有什么我可以做的转换查询吗?我必须写一个明确的查询吗?