次のようなエンティティがあります。
@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;
//...
}
codeice = 123 でMarchioを作成し、それを永続化します。わかった!
次に、クエリを介してDBから取得し、「nome」プロパティを何かで編集して、merge()を呼び出します。わかった!
次に、 codice = 123 で別のMarchioを作成します。nomeに何かを入れて、merge()を呼び出します。
結果は次のとおりです。
ConstraintViolationException: キー「コード」のエントリ「123」が重複しています
いいですね、実際には最初の方法を使用できます: クエリ、プロパティ名の編集、およびマージ。
私は「名前」しか持っていないと考えてください。私は35の異なるプロパティを持っているので、次のことはしたくありません:
Marchio m = em.findCodice("123");
m.setP1("1");
m.setP2("2");
...
m.setPN("N");
em.merge(m);
どのようにできるのか?