java - 唯一约束异常后保存实体

标签 java jpa version unique openjpa

我有一个具有唯一名称的实体。

在我的示例中,我保存了两个同名的人。第二次出现“EntityExists”(唯一)异常,这是预期的行为。

之后我更改了名称并将“ID”设置为空。 比我尝试再次保留它,但我得到“org.apache.openjpa.persistence.EntityExistsException:尝试保留分离的对象“com.Person@1117a20”。如果这是一个新实例,请确保任何版本和/或自动生成的主键字段在持久化时为空/默认。
没有版本它可以工作,但我找不到“重置”版本号的解决方案。

有人可以帮助我吗?

更新:我的新问题是,我有一个基本实体和两个 pcVersionInit (查看底部的答案)我无法覆盖它,我在基本实体和普通实体中尝试过它现在是最佳实践,而不是“覆盖” pcVersionInit 中的值吗?复制构造函数?”

public class Starter{
private static EntityManager em;

public static void main(String[] args) {
    em = Persistence.createEntityManagerFactory("openjpa")
            .createEntityManager();
    Person p1 = new Person("TEST");
    savePerson(p1);
    Person p2 = null;
    try{
        p2 = new Person("TEST");
        savePerson(p2);
    }catch(Exception e){
        p2.setId(null);
        p2.setName(p2.getName()+"2");
        em.persist(p2);
    }

}


private static void savePerson(Person person){
    em.getTransaction().begin();
    em.persist(person); 
    em.getTransaction().commit();   
}
}

人物类别:

@Entity
public class Person implements Serializable{

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="seqGenerator")
@SequenceGenerator(name="seqGenerator",sequenceName="personSeq")
private Long id;

@Version
private Long version;

@Column(nullable=true, unique=true)
private String name;

public Person(String name) {
    this.name = name;
}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Long getVersion() {
    return version;
}

public void setVersion(Long version) {
    this.version = version;
}    
}

最佳答案

首先,不要乱搞 pcVersionInit。我建议在您的 Person 实体中创建一个复制构造函数,并在回滚时使用复制构造函数创建一个新的构造函数。

关于java - 唯一约束异常后保存实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23325760/

相关文章:

java - 从java确定linux版本

java - 添加第二列与第一列中的重复元素

Java EE 7 动态用户角色

hibernate - JPA/Hibernate - 单向 OneToOne 关联上的反向连接?

emacs - 如何获取Package安装的插件版本?

php - 如何在 PHP 或 JavaScript 中合并文件的两个版本?

java - 使用CSRF登录后如何启用Spring Security POST重定向?

java - 在Swing中设置JComboBox的背景

java - JPA中joinTransaction的使用

mysql - 我可以在 JPA 中按顺序对值求和吗?