我正在使用Hibernate / Spring应用程序来管理一些电影。
班级电影与班级流派有着多对多的关系。这两个类都使用GeneratedValue注释生成了ID。
使用@Cascade(CascadeType.SAVE_UPDATE)通过电影对象保存了流派。我对流派的type属性(它的名称;例如“ Fantasy”)设置了唯一的约束。
我现在想做的是让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
您可能对此考虑过多。任何select-before-update / select-before- save选项都将导致2次DB往返,第一个往返于select,第二个往返于插入(如果需要)。
如果您知道从一开始就不会有很多类型,那么大多数时候您确实有两种选择可以做到:
Realistically, though, unless you’re talking about a LOT of transactions, a simple pre-query before save/update is not going to kill your performance.