我想使用组合模式来重用类的公共部分,就像我在 Jackson 中使用 @JsonUnwrapped 所做的那样,而无需在 mongodb 文档中添加额外的结构级别,例如:
class A {
int x; int y;
}
class B {
@JsonUnwrapped
A a;
}
class C {
@JsonUnwrapped
A a;
}
这样当B或C存储在mongodb中时,它看起来像:
{ x:123, y:456 }
而不是
{ a: { _class:"A", x:123, y:456 } }
不幸的是,我在spring-data-mongodb注释或核心spring数据注释中没有找到合适的注释。有吗?我知道这必然使 A 子结构的多态性变得不可能。
@Unwrapped
注释添加了对此的支持。这位于Unwrapped Types Mapping下的参考文档中。
用途:
class User {
@Id
String userId;
@Unwrapped(onEmpty = Unwrapped.OnEmpty.USE_NULL)
UserName name;
}
class UserName {
String firstname;
String lastname;
}
{
"_id" : "1da2ba06-3ba7",
"firstname" : "Emma",
"lastname" : "Frost"
}
Spring Data MongoDB 不评估 Jackson 注释。实现此功能的最佳机会是提供根据您的需求量身定制的CustomConverter。
但是,有一个开放的票证(DATAMONGO-1902)支持将嵌套结构展平到您可能投票支持的父文档中/从父文档中读取嵌套结构。