慕桂英3389331
2023-09-13 15:42:03
我試圖在春天建立電影和演員之間的關系模型。這里有我的兩門課:@Entitypublic class Movie { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; private String genre; private String year; @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) private List<Actor> actors;// getters and setters@Entitypublic class Actor { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String surname; private String age;// getters and setters我已經定義了多對多單向關系,它工作正常,但在以下情況下不行。如果我插入一部新電影,其中包含數據庫中尚未存在的新演員,則效果很好,所有表都會正確更新。但是,如果我想插入一部包含已保存演員的新電影,我不想保存兩次,我希望關系表引用已保存的演員,并且在演員表中不添加新演員。以下 JSON 是發送到端點以創建新電影的 JSON:{ "actors": [ { "age": "string", "dni": "string", "name": "string", "surname": "string" } ], "genre": "string", "title": "string", "year": "string"}那么如何插入數據庫中已有演員的電影以便被引用呢?因為如果我插入一個具有完全相同數據的新數據,我會將該參與者保存兩次,并且在標識符重復的情況下,我會遇到唯一索引或主鍵沖突。非常感謝你的幫助!
2 回答

夢里花落0921
TA貢獻1772條經驗 獲得超6個贊
如果數據庫中已有演員,則必須先獲取它,然后將其添加到列表中。
@Autowired
ActorRepository actorRepository;
Optional<Actor> actorOptional = actorRepository.findById(id);
if(actorOptional.isPresent()){
movie.getActors().add(actorOptional.get());
}else{
// create new actor and add it to the list
}

一只甜甜圈
TA貢獻1836條經驗 獲得超5個贊
如果@Id
兩邊都有對象標識符 [ ],則可以使用session.saveOrUpdate
來自 Hibernate 文檔:
saveOrUpdate()
執行以下操作:
如果該對象已在此會話中持久化,則不執行任何操作
如果與會話關聯的另一個對象具有相同的標識符,則拋出異常
如果對象沒有標識符屬性,
save()
則如果對象的標識符具有分配給新實例化的對象的值,
save()
則它如果該對象由
<version>
或 進行版本控制<timestamp>
,并且版本屬性值與分配給新實例化的對象的值相同,save()
則否則
update()
該對象
添加回答
舉報
0/150
提交
取消