有没有一种方法可以在不破坏实体映射的情况下 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
我有一个 application_user
table 和相应的 UserEntity
记录。此外,我有一个 user_meta_data
table 和 UserMetaDataEntity
记录作为 user
.
@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