我有@Entity的Recipe.java對象:休眠保存到數據庫 「爲重點重複條目 '1' 'UK_2n5xttsxwbyc6x67l0x8phfwn'」
...
@OneToMany(cascade = CascadeType.ALL)
private List<Category> category;
...
然後Category.java對象爲@Entity:
...
@OneToOne(cascade = CascadeType.ALL)
private Name name;
...
假設數據庫看起來像這樣(recipe_category表):
然後執行以下代碼(我只是想一個類別添加到配方):
...
Recipe recipe = recipeRepository.findOne(recipeId);
Category ctg = categoryRepository.findOne(categoryId); // id=1
List<Category> categories = recipe.getCategory();
categories.add(ctg);
recipe.setCategory(categories);
recipeRepository.save(recipe);
...
在recipeRepository.save(recipe)
我收到以下錯誤:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'UK_2n5xttsxwbyc6x67l0x8phfwn'
那麼,什麼將是解決辦法對於這個問題?
UPDATE:
配方表的結構是這樣的:
類別表結構如下:
所以,問題似乎發生,因爲當recipe.setCategory(categories);
被觸發,它會嘗試將ctg
保存到數據庫,但它已經存在。我想要的不是將它保存到數據庫(因爲它已經在'category'表中),而是在recipe_category
表中添加一個新行。
也許它必須做一些級聯?
我認爲這是由於@OneToMany的誤用,這個答案可能會有所幫助:http://stackoverflow.com/a/ 15802642/7624937 – LLL
你如何創建你的表?你可以發表表格結構,創建腳本或至少定義異常中提到的關鍵字嗎? – infiniteRefactor
@infiniteRefactor我已經更新了關於表結構的一些細節。所以問題不在於'創建'過程,而是當我想將現有類別添加到配方中時。 – Cristian