我在父表和子表之间有一对多关系.在父对象中,我有一个

List<Child> setChildren(List<Child> childs)

我在Child表中还有一个外键.此外键是引用数据库中父行的ID.因此,在我的数据库配置中,这个外键不能为空. 此外,该外键是父表中的主键.

因此,我的问题是如何通过执行以下操作自动保存子对象:

session.save(parent);

我try 了上述操作,但收到数据库错误,报告Child表中的外键字段不能为空.有没有一种方法可以告诉JPA将这个外键自动设置到Child对象中,这样它就可以自动保存子对象呢?

提前谢谢您.

推荐答案

我try 了上述操作,但收到数据库错误,报告Child表中的外键字段不能为空.有没有一种方法可以告诉JPA将这个外键自动设置到Child对象中,这样它就可以自动保存子对象呢?

这里有两件事.

首先,您需要级联save操作(但我的理解是,您正在这样做,否则在"child"表中插入时不会出现FK约束冲突)

其次,您可能有一个双向关联,我认为您没有正确设置"链接的两边".你应该这样做:

Parent parent = new Parent();
...
Child c1 = new Child();
...
c1.setParent(parent);

List<Child> children = new ArrayList<Child>();
children.add(c1);
parent.setChildren(children);

session.save(parent);

一种常见模式是使用链路管理方法:

@Entity
public class Parent {
    @Id private Long id;

    @OneToMany(mappedBy="parent")
    private List<Child> children = new ArrayList<Child>();

    ...

    protected void setChildren(List<Child> children) {
        this.children = children;
    }

    public void addToChildren(Child child) {
        child.setParent(this);
        this.children.add(child);
    }
}

代码变成:

Parent parent = new Parent();
...
Child c1 = new Child();
...

parent.addToChildren(c1);

session.save(parent);
References

Database相关问答推荐

芭蕾舞女演员坚持 1:N 关系

如何在mongodb数据库中设置导入的CSV文件的字段之间的关系

动态数据模型

术语 SSTable 和 LSM Tree 有什么区别

如何识别 DB2 端口号

在 PostgreSQL 触发函数中使用 pg_notify

在 MongoDB 中模拟关系

当使用多个 WHEN MATCHED 语句时,它们是全部执行,还是只执行一个?

如何禁用 Django 查询缓存?

如何在 DB2 的单个更新语句中更新多个列

在 MS SQL 中使用 GUID 作为主键是不是一个坏主意?

如何从 MySQL 行中修剪前导和尾随引号?

从 Java 创建 MySQL 数据库

如何在我的 SQL Server 代理作业(job)中创建一个将运行我的 SSIS 包的步骤?

如何将 Android 手机上的 SQLite 数据库与服务器上的 MySQL 数据库同步?

将用户数据存储在 LDAP 而不是 RDBMS 中的原因

为 PHPMyadmin DB 自动生成数据库图?

如何使用 Entity Framework CF 在父级之前删除子实体?

SQLite3 UNIQUE 约束失败错误

如何将空值传递给外键字段?