1

我是 Quarkus 的新手,真的很高兴在我的下一个项目中使用它。我的第一步是配置 mysql 连接并以反应方式对其执行查询,如此处所示。我不想使用 JPA/Hibernate,所以我没有采用 Panache 方式。

但我发现在映射行集时我不能使用表别名。

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 是一个非常常见的列名),将无法进行包含复杂连接的查询。

有没有办法改变这种行为,或者它只是一个错误? Im using Quarkus 1.13.0.Final with the quarkus-reactive-mysql-client dependency

4

1 回答 1

2

表别名有效,但如果您想.在别名中有一个点 ( ),您必须对其进行转义:

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 = ?"
于 2021-04-03T00:46:05.540 回答