我正在使用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.
问题内容: 我有以下问题,当试图在数据库中插入对象时,Hibernate卡住,没有返回错误,对象没有正确保存。 调试它,我发现它挂在 我正在使用PostgreSQL作为数据库。 我的配置文件: SELECT部分起作用。 我不确定我缺少什么。同样使用本地SQL插入命令,它也可以工作。 问题答案: 我没看到你这么忙 但最可取的是
我正在使用DB2数据库和hibernate框架。有两个表,如Word和Litter,它们的关系是一对多。 > 架构A: 但是这段代码给出了一个异常:JDBCExceptionReporter logExceptions是我正在使用的方法吗?
我正在尝试对可能存在属性的对象进行查询。但是我在获取
我有一个实体CandidateTransaction和CandidateTransactionRepository扩展了CrudRepository 我正在使用CrudRepository的save方法来保存所述实体的对象。当实体没有行时,它将创建一个自动生成的键并将其插入ID列,而不需要Java端的干预。 而且,由于CrudRepository的save()方法检查实体是否是新的,如果是新的,它
我是postgreSQL的新手,我正在尝试创建一个模式文件,其中包含创建数据库和所需表所需的所有脚本。我过去为SQl服务器执行此操作的方式是检查数据库是否存在,然后运行必要的脚本。 postgreSQL中的以下脚本引发了一个错误:“无法从函数或多命令字符串执行创建数据库” 我通过导出数据库的备份创建了一个postgres数据库转储文件,但其中包含, 这意味着每次运行模式文件时,数据库都会被删除并重
我试图用JPA将一个对象保存到数据库中。对象有两个属性age和email。电子邮件是@id和字符串类型。 如果我试图用相同的电子邮件保存两个对象。最后一个更新数据库。 如何使上次保存失败?