我有一个基类
@MappedSuperclass
@Data
public class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Enumerated(EnumType.STRING)
@Column(length = 20)
private EntityStatus entityStatus;
public BaseEntity() {
entityStatus = EntityStatus.ACTIVE;
}
}
,并且我在项目中的每个Entity中都使用entityStatus。用于标记实体已禁用,而不是从表中删除。
public enum EntityStatus {
ACTIVE, DISABLED;
}
@Entity
@Data
public class Event extends BaseEntity {
private String name;
private LocalDateTime start;
private LocalDateTime end;
private Boolean isTaxable;
}
现在,我可以将实体标记为“活动”或“禁用”,也可以在DAO上使用JpaRepository接口。 下一步,我只想对“已启用”实体进行操作。我该怎么办?
有了JpaRepository,我有很棒的CRUD(甚至更多)方法,但是看来我只需要重写它们或使用JpaRepository实现父级创建一些子对象。这实际上似乎是开销。
其他选项是使用几种方法创建服务 公共BaseEntity filterDisabled(BaseEntity baseEntity) 公共Collection filterDisabled(Collection实体)
每次从DAO层获得响应时,我都会在服务中调用此方法。这比较容易,但看起来很丑。
如何以最佳方式解决此问题?