2017-07-19 46 views
0

我有兩個類A和B,使得休眠:CascadeType.ALL應該嘗試創建對象,如果它不存在

class A{ 

    @ManyToOne(cascade=CascadeType.ALL) 
    B b; 

    // other stuff 
} 

在B類

class B{ 

    @Id 
    @Column(unique = true, nullable = false) 
    private Integer id; 

    // other stuff 
} 

每當一個新的對象A的創建我想創建對象B,如果它不存在。但是,如果它已經存在,那麼我不想創建它。在這種情況下,我只想在已經存在的B對象的A表中引用。現在,當我嘗試這樣做

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '10' for key 'PRIMARY' 

這似乎是一個標準的任務,但我似乎無法找到關於計算器等。可有人請幫助解決任何我得到這個例外。謝謝 !!

編輯:爲了保存,我使用了Sring JPA存儲庫。我有A和B的存儲庫接口,最終擴展CrudReposioty並使用其保存功能。下面是從org.springframework.data.repository.CrudRepository

/** 
* Saves a given entity. Use the returned instance for further operations as the save operation might have changed the 
* entity instance completely. 
* 
* @param entity 
* @return the saved entity 
*/ 
<S extends T> S save(S entity); 
+0

添加執行保存/更新並導致excetpion的方法 –

+0

您可以使B中的Id成爲生成的值嗎? –

+0

@MaciejKowalski這個id將會被提供,因此不會產生任何幫助。我想這與彈簧數據JPA有關,然後休眠 – varunkr

回答

2

你需要插入對象的數據庫之前設置對象B的ID的功能。在這種情況下,如果B不存在,B將被插入到數據庫中。

+0

我確實設置了ID,並且您提到的情況正常工作。它當B存在於db中時會拋出異常 – varunkr

+0

什麼是異常? –