2017-08-31 35 views
0

我有兩個具有典型主外鍵關係的實體。 EntityA中的id在EntityB中具有外鍵關係。我試圖在同一事務中堅持實體A和實體B.javax.persistence.version導致實體的Id在事務中保持爲空

Entity A 
------------------------------- 
@Id 
@GeneratedValue(strategy = IDENTITY) 
private Long id; 

@Version 
private Integer version; 

Entity B 
-------------------------------- 
@ManyToOne 
@JsonBackReference 
@JoinColumn(name = "id_fk") 
private EntityA entityA; 

@Version 
private Integer version; 

我正在使用javax.persistence.version註釋在版本列上執行樂觀鎖定。我有兩個語句

1. entityARepository.save(entityA) 
    2. EntityB entityB = generateEntityB(entityA) 
    3. entityBRepository.save(entityB) 

號3失敗,不同的是實體一個id爲空,entityB不能與實體A的ID空保存我想聲明1後使用entityManager.flush()但實體ID的聲明當遇到第3行時,A不會生成。

如何更改代碼,以便實體A的Id得到生成並持久化,以便當entityB試圖獲取實體A的主鍵時,它不是null

+0

如果要保存2個實體然後和藹POST的實體,並相互關聯的對象,然後張貼實際的SQL代碼(JPA是圍繞類,而不是面向TABLES)調用 –

+0

看到更新的問題。謝謝! – somename

+0

您使用的是JPA嗎?那麼你使用Entitymanager,我猜。 save方法會調用entitymanager.persist?我刪除了我的第一個問題 – aschoerk

回答

1

如果有人遇到同樣的問題,CrudRepositorySpring Data的保存操作可能會返回完全不同的實體實例,因此您必須執行以下操作。

1. entityA = entityARepository.save(entityA) 
    2. EntityB entityB = generateEntityB(entityA) 
    3. entityBRepository.save(entityB) 
相關問題