Hibernate使用@PrePersist 注解自动生成实体的所属部门

我们知道通过@CreatedBy注解,能够在实体进行实例化时,自动生成createUser信息。那么,是否可以在进行实例化时,同时根据生成的createUser信息,对应生成相应的其它信息呢?

比如:我们现在需要在生成createUser时,自动生成当前用户所在的部门createDepartment信息.

解决方案

我们首先想到的是Override相关方法,比如:setCreateUser

public void setCreateUser(User user) {
    this.user = user;
    this.department = user.getDepartment();
}

很失望,该方法并没有起作用。这说明,jpa在处理@CreatedBy注解时。并未调用setCreateUser()方法。

接着,查询spring jpa data官方文档,并没有得到想要的答案。查询hibernate官方文档 找到如下章节:https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#events-jpa-callbacks

实现

有了方法了,我们尝试进行实践。

    @PrePersist
    public void setDepartment() {
        this.department = this.createUser.getDepartment();
    }

测试通过。在进行持久化时,成功的生成了部门信息。

最后,查看引入的注解,竟然发现它一直躺在:javax.persistence包中。为自己汗颜!

clipboard.png

事实再次告诉我:官方文档的学习! JAVA基础的学习! 很重要!

总结

能成功生成的原因猜想:
hibernate先执行了@CreateBy注解,然后执行了@PrePersist注解。所以要执行@PrePersist时,createUser并不为null,最后执行成功。

最佳实践告诉我们:我们遇到的问题,其它大牛们早就遇到而且给出了最佳的方案了。我们要做的就是:找到他们!而在相当长的一段时间里(相信99%的程序员会一直处于在这个相当长的时间里),我们都不会成为大牛。所以,我们要提升的永远是:找解决方案的能力!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值