将对象保存在数据库中(如果它尚不存在)(Hibernate和Spring)

前端之家收集整理的这篇文章主要介绍了将对象保存在数据库中(如果它尚不存在)(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

解决方法

你可能在想这个.任何select-before-update / select-before-save选项将导致2个DB往返,第一个用于select,第二个用于插入(如果需要).

如果你知道从一开始你就不会有很多类型,那么在大多数情况下你都可以在1 RT中做到这一点:

> Hibernate二级缓存可以容纳很多(如果不是全部)类型,在检查存在时会导致简单的哈希表查找(假设单个节点).
>您可以假设所有类型都已存在,使用session.load(),并处理新的插入,因为在引用尚不存在的类型时会引发行未找到异常.

但实际上,除非您谈论大量事务,否则在保存/更新之前进行简单的预查询不会影响您的性能.

猜你在找的MsSQL相关文章