有代码,当我试图创建四个客户时。1.将Customer3 1,2写入数据库;2.合并Customer3(具有相同的id,例如1);3. merget Customer4(再次使用相同的id )--我想创建相同实体的任何版本
所以,
public static void main(String[] args) {
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("Info");
EntityManager entityManager = entityManagerFactory.createEntityManager();
Customer customer1 = new Customer("1", "Vladislav");
Customer customer2 = new Customer("2", "Maria");
Customer customer3 = new Customer("1", "Ekaterina");
Customer customer4 = new Customer("1", "Helen");
entityManager.getTransaction().begin();
entityManager.persist(customer1);
entityManager.persist(customer2);
entityManager.getTransaction().commit();
entityManager.getTransaction().begin();
entityManager.merge(customer3);
entityManager.getTransaction().commit();
entityManager.getTransaction().begin();
entityManager.merge(customer4);
entityManager.getTransaction().commit();
//get versions here:
entityManager = entityManagerFactory.createEntityManager();
AuditReader auditReader = AuditReaderFactory.get(entityManager);
List<Number> versions = auditReader.getRevisions(Customer.class, "1");
System.out.println("========");
System.out.println(Arrays.toString(versions.toArray()));
entityManager.close();
entityManagerFactory.close();
}客户实体:
package entity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.envers.Audited;
import javax.persistence.*;
@Getter
@Setter
@NoArgsConstructor
@Entity
@Audited
public class Customer {
@Id
@Column(length = 100, nullable = false)
private String id;
private String name;
@Version
int version;
public Customer(String id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Customer{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", version=" + version +
'}';
}
}当我坚持只有客户1,2和合并客户3-一切都好。
但是我在customer4实体中添加了mergin -有错误消息occours -
线程"main“javax.persistence.OptimisticLockException: Row中的异常被另一个事务更新或删除(或未保存的值映射不正确):由: org.hibernate.StaleObjectStateException: Row引起的entity.Customer#1被另一个事务更新或删除(或未保存-值映射不正确):entity.Customer#1 .
为什么我任何时候都不能合并?
发布于 2018-10-31 10:03:24
您只能将客户与具有最新版本的实例合并。
customer1有version=0
id = '1‘的当前版本现在是0
customer3有version=0,因此合并是可能的,并在合并version=1之后进行。
id = '1‘的当前版本现在是1
customer4有version=0,因此不再可能合并。
https://stackoverflow.com/questions/53078560
复制相似问题