OpenJPA中的@GeneratedValue不允许赋值
在使用OpenJPA的时候,创建Entity,id是使用@GeneratedValue来生成的,由于没有注意到它的特性,在update的时候,直接自己生成了一个Entity实例,然后给id赋值,没想到抛出错误,说是会给id赋值产生重复键,但其实这个id是存在的,我只是想更新它。后来废了好大的劲,才搜到@GeneratedValue不能赋值,无论是创建还是更新时,似乎OpenJPA在生成的Entity的Class中做了手脚,一旦有赋值就抛出异常。
如:
@Entity
class
Person
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "uuid-hex")
private int id;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
当更新时,如果这样写就会出错:
int
id
=
1
;
//这个id在数据库中已经存在,要更新这个id所属的行
Person p
=
new
Person();
p.setId(id);
必须要这样写:
int
id
=
1
;
//
这个id在数据库中已经存在,要更新这个id所属的行
Person p
=
entityManager.get(Person.
class
, id);
//
更新p的信息
entityManager.update(p);
如:













当更新时,如果这样写就会出错:






