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。很高興爲你工作 –