【发布时间】:2017-09-12 13:35:14
【问题描述】:
我正在使用 Spring Boot、Spring Data 和 JPA Rest Repositories 以及 MySQL 作为数据库,我想在创建实体时做几件事。
假设我有一个 MainChecker 实体,每个实体都有各种 Checker,每当 MainChecker 被创建/更新时,它们都需要创建/删除或更新。
这就是我想做的:
使用 Spring Data Repositories 将 MainChecker 实体从前端插入到我的数据库中(因此它将是带有参数的 JSON)。
这些 MainChecker 实体中的每一个都将具有布尔字段(以及其他)。
基于这些布尔字段,我想相应地对其他实体进行 CRUD。 因此,如果 MainChecker 将某个布尔值更改为 false(例如 redChecker),我想删除该 redChecker。但其他棋子仍会保留(例如绿色和蓝色)
额外的问题!一个字段是一个 JSON,其中包含用于创建这些其他实体的参数。
一个非常简单的例子:
@Entity
@Table(name="master_checker", catalog="checkers")
public class MasterChecker() {
private Long id;
private Boolean blueChecker;
private Boolean greenChecker;
private Boolean redChecker;
// constructors
// getters and setters
}
我有一些想法,但不确定哪一个是好方法。
我应该为每个字段设置一个@OneToOne 关系吗?那么布尔值就不行了,它必须是对象。以及如何从布尔值创建对象并从我的 JSON 字段中插入参数?
自定义getter和setter并在服务层创建对象(不太喜欢这个选项)
如何做到这一点(以优雅和体面的方式)?
【问题讨论】:
-
你看过 RepositoryEventHandlers,例如@BeforeCreate 和 @BeforeSave?这些将允许您在创建/更新对象期间添加一些额外的逻辑,例如检查这些检查器并在存储库中执行所需的 CRUD 操作 docs.spring.io/spring-data/rest/docs/current/reference/html/…
-
如何做到这一点(以优雅和体面的方式)?恕我直言,
MainChecker和Checker实体之间存在@OneToMany或@ManyToMany关系。这比拥有固定数量的布尔值更灵活。 -
@dic19 我只收到一个带有布尔值的 json。基于此,我需要插入或删除其他实体
-
@AdamKučera 我实际上还没有看到它。现在正在看,谢谢...
-
@AdamKučera,我实际上已经使用了这些处理程序并最终围绕它们构建了我的逻辑。如果您发表评论作为答案,我将很乐意接受。干杯
标签: java mysql jpa spring-boot spring-data-rest