1
我有2个实体使用@OneToOne
关系这样加入:休眠/ JPA持续映射OneToOne与序列发生器
public class FirstEntity {
@Id
@Column(name = "FIRST_ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "S_FIRST")
private Long ID;
@OneToOne(mappedBy = "first", targetEntity = SecondEntity.class, cascade = CascadeType.MERGE)
private SecondEntity second;
}
而其他实体那样:
public class SecondEntity {
@Id
@Column(name = "SECOND_ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "S_SECOND")
private Long ID;
@OneToOne(targetEntity = firstEntity.class)
@JoinColumn(name = "H_FIRST_FK")
private FirstEntity first;
}
但是,当我想添加一个新的第一个实体并将第二个实体(已经存在)链接到它我有几个问题。
FirstEntity firstEntity = mapper.toEntity(firstDto);
if(firstDto.getSecond() != null) {
firstEntity.getSecond().setFirst(first);
}
firstRepository.save(firstEntity);
问题:有了这个代码,我得到了一个“拆离实体”的错误,可能是因为Hibernate可以不设置第一实体的ID,因为它是一个SQL生成器。
有了这个代码:
FirstEntity firstEntity = mapper.toEntity(firstDto);
firstRepository.save(firstEntity);
if(firstDto.getSecond() != null) {
firstEntity.getSecond().setFirst(first);
}
问题:没有被保存以供secondEntity
和映射设置..
就目前而言,这似乎是工作的唯一的东西这样的:
FirstEntity firstEntity = mapper.toEntity(firstDto);
firstRepository.save(firstEntity);
if(firstDto.getSecond() != null) {
firstEntity.getSecond().setFirst(first);
}
firstRepository.save(firstEntity);
有没有办法来告诉Hibernate来:
- 获得下一序列
- 保存第一
- 合并第二,第一为FK 的ID在一个指令而不是做2手动保存?
所有这一切都不需要双重保存?
非常感谢,我从来没有想到这样简单的事情那样:o – Florian
hehe。很高兴为你工作 –