如何使用Java8中分离的相同设置对象指定JPA关系

如何使用Java8中分离的相同设置对象指定JPA关系,java,jpa,mapping,cascade,Java,Jpa,Mapping,Cascade,我试图用注释在JPA中映射以下案例: 因此,我们有一个根对象,它与我们将要在事务中保存的源有关,但在处理该根对象后,我们将获得结果对象 这里是我的映射: public class Root { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name="sou

我试图用注释在JPA中映射以下案例:

因此,我们有一个对象,它与我们将要在事务中保存的有关,但在处理该对象后,我们将获得结果对象

这里是我的映射:

public class Root {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="source_id", unique= false, nullable=false, insertable=true, updatable=false)
    private Source source;

    @Column(name = "label", nullable = true, insertable = true, updatable = false)
    private String label;
}

public class Source {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "label", nullable = true, insertable = true, updatable = false)
    private String label;
}

public class Result {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToOne(cascade = CascadeType.MERGE)
    @JoinColumn(name="source_id", unique= false, nullable=false, insertable=true, updatable=false)
    private Source source;

    @Column(name = "label", nullable = true, insertable = true, updatable = false)
    private String label;
}
我的用例:

我保存对象源和根 MYSQL:

因此,在处理过程中,我想保存对象结果以将该值与源对象链接,但我只想链接SELECT(而不是INSERT/UPDATE/REMOVE)

我的lombok代码:

SourceEntity source = SourceEntity.builder().id(root.getId()).build();

ResultEntity result = ResultEntity.builder().source(source).label("REFERENCE TO FIRST").build();
dao.save(result);
错误:

Cannot add or update a child row: a foreign key constraint fails (`mydb`.`result`, CONSTRAINT `result_fk0` FOREIGN KEY (`source_id`) REFERENCES `source` (`id`))
我知道在映射中我做错了什么,但我找不到错误,可能是级联类型?我尝试了级联类型。也分离了


谢谢,

您说您只希望关系仅用于选择,并将所有设置为插入和更新为false。您想如何存储它?我想要结果和源之间的关系(我不插入源对象),我只想插入对对象源的引用(之前已创建),当我带来结果对象时,我带来源。您必须删除insertable=true,updateable=false,然后将设置关系。可插入/可更新的是外键,而不是对象本身。级联类型可以吗?我正在尝试您提出的方法,但在测试中,我遇到了相同的错误,我认为这是因为它没有刷新数据库。错误仅在测试模式下出现,我认为保存不会影响更改。您说您只希望将“选择”和“设置全部”的关系设为“插入”和“更新为false”。您想如何存储它?我想要结果和源之间的关系(我不插入源对象),我只想插入对对象源的引用(之前已创建),当我带来结果对象时,我带来源。您必须删除insertable=true,updateable=false,然后将设置关系。可插入/可更新的是外键,而不是对象本身。级联类型可以吗?我正在尝试您提出的方法,但在测试中我遇到了相同的错误,我认为这是因为它没有刷新数据库。错误仅在测试模式下出现,我认为保存不会影响更改。
Cannot add or update a child row: a foreign key constraint fails (`mydb`.`result`, CONSTRAINT `result_fk0` FOREIGN KEY (`source_id`) REFERENCES `source` (`id`))