我有一个实体,其中包含以下多个字段以及在插入内自动生成的字段
现在,每当我想在DAO中使用merge()进行更新时,它将添加一个新条目,而不是更新当前条目。我假设这是由于id上的UPDATE语句而且每次都是新的id。 JPA(Hibernate)中是否有一种方法可以避免在数据库中编写新记录而只是更新。请在下面找到我的实体对象:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "CONFIG_ID")
private long configID;
@ManyToOne
@JoinColumns({
@JoinColumn(name = "CID", referencedColumnName = "CID", insertable = true, updatable = false),
@JoinColumn(name = "DID", referencedColumnName = "DID", insertable = true, updatable = false)})
@Version private <Object> dE;
@Column(name = "HISTORY", nullable = false, unique = false)
private String history;
答案 0 :(得分:1)
merge()
应该用于分离的实体使用。它是一个更新或插入操作,具体取决于合并对象的标识是否为null。如果为null,则将插入新记录。
要在JPA中正确更新实体,只需加载它并更改其属性即可。当事务提交时,JPA将确定是否存在任何属性更改,并在有更改时发出UPDATE SQL。无需在EntityManager
上调用任何方法进行任何更新。
参考: