Java 无法在Quarkus/Mutiny SqlClient中使用表别名?
我是Quarkus的新手,在我的下一个项目中使用它真的很兴奋。我的第一步是配置mysql连接,并以反应式方式对其执行查询,如图所示。我不想使用JPA/Hibernate,所以我没有采用华丽的方式 但我发现在映射行集时不能使用表别名Java 无法在Quarkus/Mutiny SqlClient中使用表别名?,java,kotlin,quarkus,mutiny,Java,Kotlin,Quarkus,Mutiny,我是Quarkus的新手,在我的下一个项目中使用它真的很兴奋。我的第一步是配置mysql连接,并以反应式方式对其执行查询,如图所示。我不想使用JPA/Hibernate,所以我没有采用华丽的方式 但我发现在映射行集时不能使用表别名 val sql = "SELECT u.id, u.name, u.created_at, u.edited_at FROM user AS u WHERE id = ?" val params = Tuple.of(request.id)
val sql = "SELECT u.id, u.name, u.created_at, u.edited_at FROM user AS u WHERE id = ?"
val params = Tuple.of(request.id)
return client.preparedQuery(sql).execute(params)
.onItem().transform { rowSet ->
rowSet.firstOrNull().let { row ->
row?.let {
User.fromRow(it)
}
}
}
...
return User(
id = UUID.fromString(row.getString("u.id")), //Not working !! I only can parse from `id` not from `u.id` :(
name = row.getString("u.name"),
createdAt = row.getLocalDateTime("u.created_at").toInstant(ZoneOffset.UTC),
editedAt = row.getLocalDateTime("u.edited_at").toInstant(ZoneOffset.UTC)
)
这确实令人沮丧,因为当列名不明确时(例如id是一个非常常见的列名),不可能进行包含复杂联接的查询
有没有办法改变这种行为,还是只是一个bug?
Im使用Quarkus 1.13.0.Final和Quarkus反应式mysql客户端依赖项
表别名可以工作,但如果您想在别名中有一个点(
),则必须将其转义:
val sql = "SELECT u.id as `u.id`," +
" u.name as `u.name`," +
" u.created_at as `u.created_at`," +
" u.edited_at as `u.edited_at`" +
" FROM user AS u WHERE id = ?"
非常感谢。效果很好:)