【发布时间】:2021-10-28 16:16:22
【问题描述】:
有没有办法将@EmbeddedId 中定义的属性暴露给@SuperBuilder?
// Composite id class
@Data
@Builder(builderMethodName = "having")
@NoArgsConstructor
@AllArgsConstructor
@Embeddable
public class TheId {
@Column(name = "name", insertable = false)
private String name;
@Column(name = "description", insertable = false)
private String description;
}
// Base entity class
@SuperBuilder
@Getter
@Immutable
@MappedSuperclass
@AllArgsConstructor
@NoArgsConstructor
public class BaseEntity implements Serializable {
@Delegate
@EmbeddedId
private TheId id;
@Column(name = "long_description", insertable = false)
private String longDescription;
}
// Concreate entity over database view
@Entity
@Table(name = "view_number_1")
@Getter
@Setter
@Immutable
@AllArgsConstructor(staticName = "of")
@SuperBuilder(builderMethodName = "having")
public class ConcreteEntity1 extends BaseEntity {}
我希望能够编写这样的代码:
ConcreateEntity1.having()
.name("the name")
.description("something")
.longDescription("akjsbdkasbd")
.build();
而不是
ConcreateEntity1.having()
.id(TheId.having()
.name("the name")
.description("something")
.build())
.longDescription("akjsbdkasbd")
.build();
整个概念背后的原因:
同名列存在于多个视图中,因此为所有视图使用一个基类是合乎逻辑的。虽然实体本身是不可变的(基于数据库视图),但我想在测试中使用builder,这就是为什么我想像上面那样使用它们。
【问题讨论】: