我有一个类似于以下内容的实体:
@Entity
@Table( name="marchi", uniqueConstraints=@UniqueConstraint(columnNames="codice") )
public class Marchio implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
private String codice;
private String nome;
//...
}
我用codice = 123创建了Marchio,然后我坚持了下来。好!
然后,我通过查询从数据库中检索它,使用某些内容编辑“ nome”属性,然后调用merge()。好!
然后,我创建另一个codice = 123的Marchio。将某些内容放入nome中,然后调用merge()。
结果是:
ConstraintViolationException:键“ codice”的条目“ 123”重复
很好,实际上我可以使用第一种方式:查询,编辑属性nome和合并。
考虑一下我不仅只有“ nome”。我有35个不同的属性,所以我不想:
Marchio m = em.findCodice("123");
m.setP1("1");
m.setP2("2");
...
m.setPN("N");
em.merge(m);
我能怎么做?
最佳答案
如果我了解得很好,则您已经具有一个具有更新值的分离对象,并且您不想从数据库中检索相应的对象并通过调用许多set方法对其进行更新。
实现此目的的唯一方法是删除旧对象,然后保留分离的新对象:
em.remove(oldobj);
em.persist(newobj);