0

我将 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` = ?)

这是预期的吗?还有什么我可以做的转换查询吗?我必须写一个明确的查询吗?

4

1 回答 1

1

我相信这是 Micronaut-Data 1.1.3 中的一个错误。

作为一种解决方法,我将覆盖如下查询:

@ReadOnly
@Override
@Query(
   "SELECT * FROM user WHERE user.id = :id")
Optional<User> findById(UUID id);

在 UserRepository 界面中。

BTW 查询需要根据您的需要进行定制。

于 2020-08-13T11:53:16.917 回答