如何使用Java8中分离的相同设置对象指定JPA关系
我试图用注释在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
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`))