和 spring-data-jpa 2.0.8.RELEASE
我有一个@OneToMany相关的实体对。让我们说King& Peasant。我想要一个逻辑,当农民更新时,这也会@LastModifiedDate手动更新国王的值。我做这样的事情;
@PreUpdate
@PreRemove
@PrePersist
void updateParents() {
Date now = new Date();
BaseEntity container = getParent();
while (Objects.nonNull(container)) {
container.setUpdateDateTime(now);
container = container.getParent();
}
}
这很有效,这意味着它确实将所有父母更新到国王(表结构真的很混乱,从国王到最低的农奴有 5 个深度),我遇到的问题是,对父母的修改根本没有坚持. 我有如下服务;
@Transactional
public void update(String kingId, String peasantSeqNo) {
Peasant peasant = peasantRepository.getPeasant(kingId, peasantSeqNo);
peasant.setNobility(false);
peasantRepository.save(peasant);
}
上面代码中,触发了@PreUpdate注解的updateParents()方法,更新了king的更新时间戳,仍然在事务结束后,这个变化没有持久化。我可以使用显式触发这种持久性,kingRepository.flush()但我希望它可以自动完成,只需修改父级即可。
King-Peasant之间的联系如下;
@JsonManagedReference
@OneToMany(mappedBy = "parent", cascade = REMOVE)
private List<Peasant> peasantry;
和
@JsonBackReference
@MapsId("kingId")
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "ID_KING", referencedColumnName = "ID_KING", nullable = false)
private King parent;
这在某种程度上是我使用 JPA 的一个问题,但找不到确切的原因和解决方案,你能给我任何意见吗?
幕布斯6054654
相关分类