java - 如何使用 Hibernate 在子列上设置以前的父 ID

标签 java sql database hibernate orm

我有父实体和子实体:

@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 TRIGGERChild 表中,检查旧的 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/

相关文章:

java - Spring中Bean未初始化

mysql - 纯SQL中权重的使用

sql - 如何在表中查找值并将其插入到另一个表中?

mysql - 通常来说,公司 "A"使用 MySQL 作为数据库。它是指 MySQL 免费版还是 MySQL 企业版?

sql - 为历史表的每个外键获取最后一个条目的正确方法是什么?

java - 是什么导致了我的 java.net.SocketException : Connection reset?

java - Dr Java 帮助输入的方程不起作用

java - 带有自定义 HandlerMethodArgumentResolver 的 Spring MVC @Valid 验证

sql - 我可以使用自定义类型字段加入吗?

mysql - 如何编写 MySQL 查询以获得此结果?