entityManage事务的状态

JPA中对实体进行管理的时候,存在四种状态

image

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
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值