簡體   English   中英

Spring數據JPA保存

[英]Spring data jpa save

如何通過考試? (在遷移我的代碼以使用存儲庫之前正在工作)。 保存后, bs將存儲在數據庫中,但不會更新對象。 我必須要做些什么?

給定這些類:

@Entity
public class A {
   @Id
   private String id;
   @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
   @JoinColumn(name = "aId")
   private Set<B> bs= new HashSet<B>();
   ...
}

@Entity
public class B {
   @Id
   @GeneratedValue
   private int id;
   private String aId;
   private String foo;
   ...
}

和存儲庫:

@RepositoryDefinition(domainClass = A.class, idClass = String.class)
public interface ARepository {
   ...
   void save(A a);
   ...
}

該測試失敗:

    // "a" saved and flushed
    B b = new B();
    b.setAId(a.getId());
    a.getBs().add(b);
    ARepository.save(a);
    assertTrue(b.getId() > 0);

repository.save()確實persist (如果提供的參數是瞬時的)或merge (否則)。

由於a不是瞬態的,因此執行merge ,這意味着不persist可以級聯為bs persist操作。

你要么必須保存b明示或添加b到一個新的a對前a被保存,以便persist正確的級聯。

可能的原因是B對象尚未處於持久狀態。 一旦將其保存-您應該不會出錯。

應該看起來像這樣:

// "a" saved and flushed
B b = new B();
BRepository.save(b)
b.setAId(a.getId());
a.getBs().add(b);
ARepository.save(a);
assertTrue(b.getId() > 0);

還可以請您提供stacktrace嗎? 真的很有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM