jpa定义_springboot使用jpa 自定义注解进行校验

本文介绍了如何在SpringBoot项目中利用JPA的@EntityListeners创建自定义注解,对实体属性进行校验。通过自定义注解限制狗的年龄不超过20岁,并编写监听器在@PrePersist时进行校验,确保数据正确性。测试结果显示,当年龄超过限制时,插入操作将失败,符合预期。
摘要由CSDN通过智能技术生成

最近在看jpa的时候,想起来,要是自己写一个自定义的注解作用在entity上面应该怎么使用啊。 这里要使用到了@EntityListeners 这是一个实体的监听器

看一下springdatajpa 的官网

官方b7cf8268da2b55ef8f382ec51343a4f5.png

官方文档告诉你是咋使用,现在我们来写一个监听器。

假如我们要对年龄做限制,比如狗的年龄一般不超过20岁。我们自定义一个注解用来标记在实体的属性上面

5cca6c3cfee9b99a5c53492a35502d0c.png

再写一个监听器 

package com.ducheng.entity;import java.lang.reflect.Field;import javax.persistence.PrePersist;import org.springframework.stereotype.Component;import org.springframework.util.ObjectUtils;import com.ducheng.MaxAgeValue;@Componentpublic class MAxAgeListeners {    //保存之前被调用的函数  @PrePersist  public void PrePersist(Object entity) throws Exception{        Field[] fields = entity.getClass().getDeclaredFields();    for (Field field2 : fields) {      field2.setAccessible(true);      MaxAgeValue max = field2.getAnnotation(MaxAgeValue.class);      if(!ObjectUtils.isEmpty(max)) {        Integer valueOf = Integer.valueOf(field2.get(entity).toString());        if(valueOf > max.value()) {          throw new  Exception(" 超过最大限制 ");        }      }    }  }}

这样要加入spring的bean容器管理里面 ,

@PrePersist 是说明这个注解作用的方法在保存之前使用的。这里利用了反射,获取属性的值和反射的值进行比较。大于就抛异常。

很简单的,最后的使用 

d2b3cc5534d85e1223c34eb7f2e35435.png

写一个测试类来测试一下。

e82e859f69bd27ebab6ab04b34195dff.png

启动服务,掉一下接口 

e254c3ba5bbe7fc11124801b99a27c14.png

OK,完美, 在把年龄改小一些 

3dc1903a6f3cd8466253d74442f3d534.png

d7f52868b54d7a5898f464175efb5ce5.png

插入成功,完美,喜欢,点赞,转发。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值