假设我们有一个Employee实体,这个实体有一个自反关系(与自身的关系)。关系的类型是@ManyToOne
Map,意思是,多个Employee只受一个“Boss”(也是Employee)的监督。Employee实体也与Company实体有关系。
多个员工只为一家公司工作(@ManyToOne),而一家公司认识他的老板(@OneToOne)
问题:
我们如何基于条件(标准)持久化这种@ManyToOne和@OneToOne关系?只有当他们在同一家公司工作时,我们才能将Boss分配(持久化)给Employee。只有当Employee是老板(意味着他没有主管(NULL))时,我们才能将Employee分配到一家公司。
我想有很多解决方案,比如使用@Query,@ Prepersistent,@Filter,在服务中进行检查,但是如何以及哪一种更适合这种情况。
1条答案
按热度按时间6psbrbz91#
可通过以下方式实现:
要检查这些关系,请使用驱动程序代码MainApplication.java
如果我在这两个注解上都设置了
cascade=CascadeType.ALL
,我就可以安全地持久化其中一个实体而忽略其他实体。假设我在事务中持久化了parent。JPA实现遍历parent的children属性,因为它用CascadeType.ALL
标记。JPA实现在那里找到son和daughter。然后它代表我持久化这两个子实体,即使我没有显式地请求它。