【发布时间】:2019-06-17 16:58:57
【问题描述】:
我有一个关于 Spring Data 模型的设计问题(在我的具体案例中是 Spring Data Mongo)。
我的要求:
- 我想强制所有聚合根使用字符串作为 ID 的数据类型。
- 我想强制将空字符串或空格的 ID 编组为 null(因此 mongo 会为这些 ID 生成密钥)
- 我想最终为每个聚合根添加标准审计属性。
- 我想为模型使用 Lombok 以减少样板。
我见过几个使用抽象基类的例子:
@SuperBuilder
public abstract class PersistentDocument implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
public void setId(String id) {
if (!StringUtils.hasText(getId())) {
this.id = null;
} else {
this.id = id;
}
}
public String getId() {
this.id;
}
.
.
auditing fields...etc.
}
后裔:
@Data
@SuperBuilder
public class UnitOfMeasure extends PersistentDocument {
private static final long serialVersionUID = 1L;
private String name;
private String description;
}
有两个问题:
- 这依赖于实验“SuperBuilder”
- 需要手动添加一个构造函数来包含超级字段,这否定了 Lombok 的一些好处。
作为替代方案,我开始尝试使用接口来强制执行数据类型标准:
public interface PersistentDocument extends Serializable {
void setId(String id);
public String getId();
.
. Setters/Getters for audit fields
}
这稍微好一点,但每个后代文档都需要正确实现将空格转换为 null 并注释审计字段的逻辑。
我真的很想看看其他人在做什么?
【问题讨论】:
标签: spring-data spring-data-mongodb