有没有一种方法可以在不破坏实体映射的情况下 select 使用 JOIN 的 SELECT 语句的所有列?

Is there a way to select all columns for a SELECT statement with JOINs without breaking the entity mapping?

我有一个 application_user table 和相应的 UserEntity 记录。此外,我有一个 user_meta_data table 和 UserMetaDataEntity 记录作为 user.

的 1:1 关系
@Table("application_user")
record UserEntity(@Id @Nullable Long id,
                  // more columns
                  @Nullable
                  UserMetaDataEntity metaData
) {
// (...)
}

目前,我需要直接编写 SQL 查询,因为我手头有一些复杂的查询,无法通过函数名称轻松建模。在这些查询中,我需要明确 select 所有列

@Query("""
        SELECT application_user.ID AS ID, user_meta_data.phoneNumber AS USERMETADATA_PHONE_NUMBER
        FROM application_user
        INNER JOIN user_meta_data ON user_meta_data.user_id = application_user.id
""")
Stream<UserEntity> streamUsersWithMetaData();

但我想避免明确定义列名,因为我的实际实体有很多列。我更喜欢调用 SELECT * FROM application_user INNER JOIN ... 但这不起作用,因为 Spring Data JDBC 希望列名称以连接的 table 名称为前缀。

有没有一种方法可以定义自定义 SQL 查询而无需定义 SELECT 语句中的所有列?

您不能使用 SELECT *,但至少有两种方法可以减轻痛苦。

要么定义一个包含列列表的 static final String 并将它们与查询的其余部分连接起来。

或者您可以指定 RowMapper 进行映射。它可以包装 ResultSet 并将调用转发给原始 EntityRowMapper