JPA中对实体进行管理的时候,存在四种状态
New: 未关联EntityManager,同时也还没在数据库中存在
Managed: 实体持久化,并且开始交由EntityManager进行管理,persist方法可以达到此状态
entityManager.getTransaction().begin();
MyObject myObject = new MyObject();
entityManager.persist(myObject);
entityManager.getTransaction().commit();
Detached: 该状态会让实体脱离EntityManager的管理,需通过merge操作重新交由EntityManager管理
entityManager.detach(myObject);
Removed: 从数据库删除该实体
entityManager.getTransaction().begin();
entityManager.removed(myObject);
entityManager.getTransaction().commit();
和JPA 提供的beforeUpdate之类的操作一样,同样可以使用以下注解实现
- @PrePersist/@PostPersist
- @PreRemove/@PostRemove
- @PreUpdate/@PostUpdate
- @PostLoad
@Embeddable
public class Audit {
@Column(name = "created_on")
private LocalDateTime createdOn;
@Column(name = "created_by")
private String createdBy;
@Column(name = "updated_on")
private LocalDateTime updatedOn;
@Column(name = "updated_by")
private String updatedBy;
@PrePersist
public void prePersist() {
createdOn = LocalDateTime.now();
createdBy = LoggedUser.get();
}
@PreUpdate
public void preUpdate() {
updatedOn = LocalDateTime.now();
updatedBy = LoggedUser.get();
}
//Getters and setters omitted for brevity
}