我有一个类似的实体:
@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 ,然后我坚持下去。 OK!
然后我通过查询从数据库中检索它,用某些东西编辑“nome”属性并调用 merge()。 OK!
然后我用 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);
我该怎么办?
答案 0 :(得分:1)
如果我理解得很清楚,你已经有一个带有更新值的分离对象,你不想从db中检索相应的对象并更新它调用许多set方法。 实现此目的的唯一方法是删除旧对象,然后保留分离的新对象:
em.remove(oldobj);
em.persist(newobj);
答案 1 :(得分:-1)
试试这个:
@Table(name = "marchi", uniqueConstraints={@UniqueConstraint(columnNames="codice"), @UniqueConstraint(columnNames="nome")})
I believe with the above you can have:
codice nome
123 A
123 B
123 C