我有父实体和子实体:
@Entity
public class Parent{
@Id
private Long id;
@ManyToOne
private Child child;
.....
}
@Entity
public class Child{
@Id
private Long id;
public List<Parent> all parents;
**public Long lastParentId;**
.....
}
问题是我每次创建父项时都需要更新子项中的 lastParentId。 换句话说, child 在创建 parent 之前就存在于数据库中, child 被“分配”给他。并且在每个 parent 插入 child 的字段后,应该使用新创建的 parent ID 更新,并且这个 ID 应该是这个 child 的最后一个。换句话说:
Long childId=12323L;//lastParentId in child with id=12323L is 1234
Parent p=new Parent();
...
p.setChildId(childId);
getDao().insert(p);//lastParentId in child=1235, 1235- newly created parent id
我尝试通过手动最大选择分配此列,但有可能在选择 max() 和保存其他进程之间插入新的父进程,因此最后一个 ID 在子保存之前变得过时。我怎样才能在 hibernate 状态下执行此操作并确保这个 lastId 真的是最后一个?
最佳答案
最好的方法是使用 BEFORE UPDATE TRIGGER在 Child
表中,检查旧的 parent_id
列并将其保存到 last_parent_id
:
CREATE TRIGGER last_parent_id_check BEFORE UPDATE ON child
FOR EACH ROW
BEGIN
IF NEW.parent_id <> OLD.parent_id THEN
SET NEW.last_parent_id = OLD.parent_id;
END IF;
END;
关于java - 如何使用 Hibernate 在子列上设置以前的父 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30622525/