Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实体中未设置JPA hibernate外键_Hibernate_Jpa - Fatal编程技术网

实体中未设置JPA hibernate外键

实体中未设置JPA hibernate外键,hibernate,jpa,Hibernate,Jpa,我正在使用CASCADE.PERSIST执行父子保存 @Entity @Table(name = "parent") public class Parent extends AbstractAuditingEntity{ @OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.PERSIST) @JoinColumn(name = "parent_id",nullable = false) private List

我正在使用CASCADE.PERSIST执行父子保存

@Entity
@Table(name = "parent")
public class Parent extends AbstractAuditingEntity{

    @OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.PERSIST)
    @JoinColumn(name = "parent_id",nullable = false)
    private List<Child> children;

}


@Entity
@Table(name = "child")
public class Child extends AbstractAuditingEntity{

    @Column(name = "parent_id", insertable=false, updatable=false)
    private Long parentId;

}
但是从存储库返回的实体在子项中没有设置外键

child.getParentId()为空

有什么我可以做的吗


已尝试在子级中设置父级,但存在相同的问题

@Entity
@Table(name = "child")
public class Child extends AbstractAuditingEntity{

    @ManyToOne
    @JoinColumn(name="parent_id",nullable = false,insertable=false,updatable=false)
    private Queue queue;
}

虽然这不是一个关键问题(我可以从父级手动设置),但我只是想确定我是否做对了。

保存时没有神奇的事情发生。这意味着如果不设置parentId,则此字段为空。你必须自己设定


当您使用find或与查询一起读取数据时,该字段将由JPA设置。

正如JB Nizet所指出的,双向映射不正确

这已被更正,根据下面的链接,它工作良好


1。我们需要一个完整的最小示例来了解您正在做什么(事务边界等)。2.首先,你不应该在Child中有prentId字段。删除它,或者用Parent类型的字段替换它,并按照手册中的说明将该关联设置为适当的双向OneToMany关联。感谢您的澄清。双向关联也有相同的问题。更新了问题,该问题不是双向关联的映射方式。您还没有发布一个完整的最小示例,所以我只能猜测,在同一个事务中,您希望Hibernate填充多方。不会的。按规定。谢谢你提供的信息。是的,这发生在同一个事务中。我将尝试纠正双向关联问题已根据JB Nizet给出的建议解决。但这通常不是最佳解决方案,因为这可能导致n+1问题。正确。对于这项服务,n+1问题的成本不是一个问题。可能是为了将来的服务,我计划处理n+1问题。顺便说一句。您的问题的解决方案是我的答案,因为在创建对象时,您必须始终注意填充所有字段。JPA没有魔力
@Entity
@Table(name = "child")
public class Child extends AbstractAuditingEntity{

    @ManyToOne
    @JoinColumn(name="parent_id",nullable = false,insertable=false,updatable=false)
    private Queue queue;
}