Spring 派生查询中的数据 JDBC 列别名被截断

Spring Data JDBC column alias in derived query getting truncated

我在 Postgres 11.10 之上使用 Spring Data JDBC 2.0.5(由 Spring Boot 2.3.5 引入)。

在我们的域模型中,我们有一个聚合根,如下所示:

@Table(...)
class OurAggregateRoot {
  
  @MappedColumn(...) // 1:1 relationship
  private final ReallyLongClassNameForThisEntity reallyLongClassNameForThisEntity;
}
@Table(...)
class ReallyLongClassNameForThisEntity {
  
  @MappedColumn(really_long_class_name_id) // 1:1 relationship
  final AnotherReallyLongClassName anotherReallyLongClassName;
}

鉴于我们有三层关系和长 class 名称,我们 运行 遇到调用 CrudRepository::findById 时生成的查询中的列别名超出的情况PostgreSQL 设置的字符限制。例如。用于引用其父实体的标识符 AnotherReallyLongClassName 的列别名将是 reallyLongClassNameForThisEntity_anotherReallyLongClassName_really_long_class_name_id.

除了重命名 class/field/column 名称和限制聚合根中嵌套关系的数量之外,我们是否可以采取其他措施来防止这种情况发生?尝试更改 Postgres 别名的字符限制对我们来说似乎不是一个简单的选择。

没有直接的方法可以避免这种情况。 有帮助的事情是:如您所说,为列使用较短的名称并仔细查看您的聚合:拥有如此深度嵌套的聚合真的合适吗?