我正在處理一些Hibernate/Spring應用程序來管理一些電影。保存數據庫中的對象,如果它不存在(Hibernate&Spring)
班級電影與班級流派之間存在多對多的關係。 這兩個類都使用GeneratedValue註釋生成了id。
通過使用@Cascade(CascadeType.SAVE_UPDATE) 通過電影對象保存流派我已經對流派的類型屬性(例如名稱;「幻想」)設置了唯一約束。
我現在想要做的是讓Hibernate檢查是否已經有類型爲「Fantasy」的流派,如果有,使用該流派的ID而不是嘗試插入新記錄。 (後者顯然會引發錯誤)
最後,我需要的是像select-before-update之類的東西,但更像是select-before-save。
Hibernate中有這樣的函數嗎?
一些代碼:
電影類
@Entity
public class Movie {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String name;
@Lob
private String description;
@Temporal(TemporalType.TIME)
private Date releaseDate;
@ManyToMany
@Cascade(CascadeType.SAVE_UPDATE)
private Set<Genre> genres = new HashSet<Genre>();
.... //other methods
體裁類
@Entity
public class Genre {
@Column(unique=true)
private String type;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id
....//other methods
你可以在電影的單獨查詢體裁實體,看看是否已經有一個「幻想」流派?你也可以初始化流派設置並迭代它,看看你的流派是否存在 – Gleeb
我曾經希望hibernate有這個功能,但是,這是一個很好的解決方案。正如@ jordan002所說,我正在解決問題。 – Mike
Insert-if-exists是一種非常常見的操作......我發現Hibernate並沒有提供這個功能,我們不得不用檢查來混淆我們的代碼。 –