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 别名的字符限制对我们来说似乎不是一个简单的选择。
没有直接的方法可以避免这种情况。
有帮助的事情是:如您所说,为列使用较短的名称并仔细查看您的聚合:拥有如此深度嵌套的聚合真的合适吗?
我在 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 别名的字符限制对我们来说似乎不是一个简单的选择。
没有直接的方法可以避免这种情况。 有帮助的事情是:如您所说,为列使用较短的名称并仔细查看您的聚合:拥有如此深度嵌套的聚合真的合适吗?