加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:42:28 所属栏目:MsSql教程 来源:网络整理
导读:我正在研究一个Hibernate / Spring应用程序来管理一些电影. 课堂电影与班级类型有很多关系. 这两个类都使用GeneratedValue注释生成了id. 使用@Cascade(CascadeType.SAVE_UPDATE)通过电影对象保存该类型 我对类型的类型属性(这是它的名称;例如“幻想”)设置了
我正在研究一个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(),并处理新的插入,因为在引用尚不存在的类型时会引发行未找到异常.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读