合并具有唯一约束的实体

时间:2013-01-04 15:54:15

标签: hibernate java-ee jpa jpa-2.0 java-ee-6

我有一个类似的实体:

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

我该怎么办?

2 个答案:

答案 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