我有一个类似于以下内容的实体:

@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);

08-27 21:11