首页 > 编程语言 >Java记录唯一性check

Java记录唯一性check

时间:2023-04-03 17:37:33浏览次数:33  
标签:唯一性 Java list uks entity fd null where check

/**
* 记录唯一性check
*
* @param id 主键
* @param entity 实体记录,必须实现equals()方法才能验证更新的场合
* @param fields 唯一键字段名称
*/
if (entity == null || fields.length == 0) {   return;
}

try {
  @SuppressWarnings("unchecked")
  T where = (T) entity.getClass().newInstance();
  BeanUtils.copyProperties(entity, where);

  List<String> set = Arrays.asList(fields);
  List<String> uks = new ArrayList<>();
  Class<?> clazz = entity.getClass();
  for (Field fd : clazz.getDeclaredFields()) {
    if (fd.getName().equals("serialVersionUID")) {
    continue;
  }
  fd.setAccessible(true);
  if (set.contains(fd.getName())) {
    uks.add(String.valueOf(fd.get(entity)));
  } else {
    fd.set(where, null);
  }
}

if (uks.isEmpty()) {
  return;
}

  where.setSolrStartTime(null);
  where.setSolrEndTime(null);
  where.setUpdateTime(null);
  where.setCreateTime(null);
  // 查询满足指定字段条件的记录
  List<T> list = findList(where);
  if (id == null && !list.isEmpty()) {
  // 新增,满足条件记录不为空的场合
  throw new I18nException(MSGC000016, StringUtils.join(uks, ","));
}

if (id != null && !list.isEmpty() && !entity.equals(list.get(0))) {
  // 更新,满足的条件记录不是被更新对象的场合(主键不一致)
  throw new I18nException(MSGC000016, StringUtils.join(uks, ","));
}

} catch (I18nException e) {
  throw e;
} catch (Exception e) {
  logger.error(e.getMessage(), e);
}
}

记一次常用的字段唯一性校验封装。 

标签:唯一性,Java,list,uks,entity,fd,null,where,check
From: https://www.cnblogs.com/mr-tomato/p/17283732.html

相关文章

  • 解决java注解处理器生成的方法,在编译时报错“找不到符号”
    我的注解处理器,添加的其中一个方法中有一段AST代码如下:JCTree.JCFieldAccessobjectsIsNull=maker.Select(maker.Ident(names.fromString("java.util.Objects")),names.fromString("isNull"));JCTree.JCIfifExpr1=maker.If(maker.Apply(List.nil(),objectsI......
  • 【Java 并发】【七】【Unsafe】什么是Unsafe及其作用
    1 前言这节我们来看看JDK底层的unsafe,因为很多的操作都是依赖于unsafe提供的功能的。2  unsafe是什么?unsafe是JDK提供的一个工具类,里面的方法大多是native方法,unsafe类是JDK给你提供的一个直接调用操作系统底层功能的一个工具类,unsafe提供了非常多操作系统级别的方法。(1)比......
  • PaddleOCR服务部署-并通过Java进行调用
    文章转载自: https://blog.csdn.net/f2315895270/article/details/128150679选择部署方式  官方推荐有以下几种:  Python推理  C++推理  Serving服务化部署(Python/C++)  Paddle-Lite端侧部署(ARM CPU/OpenCLARMGPU)  Paddle.js部署     由于我......
  • 【Java虚拟机探究】10.类装载器(下)
    上一篇我们总结了类加载器的基本原理和与应用程序相关的ClassLoader,并提到了双亲委派模式。本篇继续探讨类加载器的双亲委派模式,以及如何破坏双亲委派模式达到加载底层类的目的。1.双亲委派模式的问题我们回顾一下原来的应用程序的ClassLoader的加载模式:除了顶层的ClassLoader,每......
  • 【Java虚拟机探究】9.类装载器(上)
    在JVM类要通过类装载器(ClassLoader)进行装载后,才能进行执行。本篇总结了类装载器的一些知识。一、class装载验证流程在第一篇总结中介绍了JVM的内存结构:可以看到class文件首先要通过“类加载器子系统”,才能被加载到内存中处理。那么class文件是怎么通过类加载器加载至内存中的呢......
  • 【FastDFS分布式文件系统】6.FastDFS客户端启动与Java连接
    上一篇我们讲解了如何配置和启动FastDFS客户端,以及客户端上传下载的一些常用命令。那么,在许多需要进行分布式文件上传与下载的系统中,就不能像执行Linux命令一样去上传和下载文件,它们需要使用开发系统的语言去操作客户端使用其命令与服务端进行交互,此时FastDFS......
  • 性能工具之JMeter两个Java API Demo
    概述本文演示两个通过JavaAPI执行JMeter脚本的示例主要功能在线生成jmx脚本(demo1)加载本地已有jmx脚本(demo2)运行多个Sampler将生成的TestPlan存储为.jmx文件执行单机压测将测试执行结果存储为.jtlor.csv文件示例Maven配置为了开始使用JMeterAPI,我们首先需要将它添加到......
  • java稀疏数组实现实例
    没有原理讲解,仅记录一个实现代码,作为参考和笔记使用如题,稀疏数组仅在原始数组有效数据较少的情况下起压缩空间的作用实现过程:首先为了方便查看和确认,封装一个打印二维数组的方法publicstaticvoidprintArray(int[][]arrays){for(int[]array:arrays){......
  • 114.二叉树展开为链表 Java
    114.二叉树展开为链表给你二叉树的根结点root,请你将它展开为一个单链表:展开后的单链表应该同样使用TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。展开后的单链表应该与二叉树先序遍历顺序相同。示例1:输入:root=[1,2,5,3,4,null,6]输出......
  • 详细解析Java异步线程处理队列任务工具类以及实战
    场景待入快速理解小场景描述:【一群人】来到【一个大厅】办理业务,大厅中有【多个窗口】给我们办理业务。每个人都有自己要办事情,处理过程需要消耗时间。大厅根据人群多少,开始窗口梳理。如果把“一群人”理解成一群待处理的n个【任务】,把这群人排成一个长队就形成了一个【任......