【java】spring项目中 对entity进行本类间的克隆
方法1:
【使用spring自带BeanUtils实现克隆】
【要求:需要被克隆的类实现Cloneable接口并且重写clone()方法】
》例子:
》》实体:
package com.agen.orderdiscount.entity; import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.hibernate.annotations.GenericGenerator; import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.Date; /**
* 预估金额
* 订单创建成功 往预估金额表中存入记录
* @author SXD
* @date 2018/1/16
*/
@Data(staticConstructor = "of")
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Entity
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator" )
public class EsAmount implements Cloneable{ /**
* 预估ID
*/
@Id
@GeneratedValue(generator = "uuid2")
@Column(length = 36)
private String Id;
/**
* 本次转入预估金额
*/
@Column(nullable = false,precision = 10,scale = 2)
private Double esAccount;
/**
* 本次转入时间
*/
@Column(nullable = false)
private Date esDate;
/**
* 订单ID
*/
@Column(nullable = false)
private Integer orderId;
/**
* 订单编号SN
*/
@Column(nullable = false,length = 20)
private String orderSn;
/**
* 机构ID
*/
@Column(nullable = false)
private Integer adminId;
/**
* 产品ID
*/
@Column(nullable = false)
private Integer productId;
/**
* 会员ID
*/
@Column(nullable = false)
private Integer memberId;
/**
* 采样包ID
*/
@Column(nullable = false)
private Integer cybId;
/**
* 操作来源
*/
@Column(nullable = false,length = 20)
private String esOperater;
/**
* 预估金额备注1
*/
@Column(length = 500)
private String esCre1;
/**
* 预估金额备注2
*/
@Column(length = 500)
private String esCre2; @Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
} }
》》使用:
EsAmount esAmount = esAmountRepository.findEsAmountByAdminIdAndOrderIdAndProductId(adminId,orderId,productId);
if(Objects.nonNull(esAmount)){
//1.1 将预估金额扣除到可提现金额的记录也记录到预估金额记录表中
EsAmount esAmount1 = new EsAmount();
BeanUtils.copyProperties(esAmount,esAmount1);
if(Objects.nonNull(esAmount1)){
BeanUtils.copyProperties(esAmount,esAmount1); 将参数1克隆一份给参数2
=====================================================================================
方法2:
【使用java.lang.Serializable实现深度克隆】
【要求,不需要类实现Cloneable,只需要它们实现java.lang.Serializable即可】
》工具类:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public abstract class BeanUtil {
@SuppressWarnings("unchecked")
public static <T> T cloneTo(T src) throws RuntimeException {
ByteArrayOutputStream memoryBuffer = new ByteArrayOutputStream();
ObjectOutputStream out = null;
ObjectInputStream in = null;
T dist = null;
try {
out = new ObjectOutputStream(memoryBuffer);
out.writeObject(src);
out.flush();
in = new ObjectInputStream(new ByteArrayInputStream(memoryBuffer.toByteArray()));
dist = (T) in.readObject();
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (out != null)
try {
out.close();
out = null;
} catch (IOException e) {
throw new RuntimeException(e);
}
if (in != null)
try {
in.close();
in = null;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return dist;
}
}
》使用:
Administrator src = new Administrator(new User("Kent", "123456", new Date()), true);
Administrator dist = BeanUtil.cloneTo(src);
=====================================================================================
【java】spring项目中 对entity进行本类间的克隆的更多相关文章
- spring项目中 通过自定义applicationContext工具类获取到applicationContext上下文对象
spring项目在服务器启动的时候 spring容器中就已经被创建好了各种对象,在我们需要使用的时候可以进行调用. 工具类代码如下 import org.springframework.beans.B ...
- java web项目(spring项目)中集成webservice ,实现对外开放接口
什么是WebService?webService小示例 点此了解 下面进入正题: Javaweb项目(spring项目)中集成webservice ,实现对外开放接口步骤: 准备: 采用与spring ...
- JAVA WEB项目中各种路径的获取
JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报 分类: JAVA开发(41) 1.可以在s ...
- spring项目中使用定时任务
当我们希望在某个时间点来执行一些业务方法的时候就用到定时任务,在spring的项目中使用定时任务很简单.如下 第一步.加入jar包 <dependency> <groupId> ...
- linux 下用renameTo方法修改java web项目中文件夹名称问题
经测试,在Linux环境中安装tomcat,然后启动其中的项目,在项目中使用java.io.File.renameTo(File dest)方法可行. 之前在本地运行代码可以修改,然后传到Linux服 ...
- 对Java Web项目中路径的理解
第一个:文件分隔符 坑比Window.window分隔符 用\;unix采用/.于是用File.separator来跨平台 请注意:这是文件路径.在File f = new File(“c:\\hah ...
- Java Web项目中缺少Java EE 6 Libraries怎么添加
Java Web项目中缺少Java EE 6 Libraries怎么添加 具体步骤如下: 1.项目名称上点击鼠标右键,选择"Build Path-->Configure Build P ...
- java web 项目中 简单定时器实现 Timer
java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报 分类: JAVA(24) 版权声明:本文为博 ...
- Java Web项目中连接Access数据库的配置方法
本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...
随机推荐
- 函数名&函数名取地址
有时看到如下的代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /*****************************/ #includ ...
- Centos 7下利用crontab定时执行任务详解
一 cron服务 cron服务是Linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: /sbin/service crond start /sbin/service crond ...
- Selenium WebDriver-判断页面中某一元素是否可操作
driver.get("http://127.0.0.1/test_enable.html") i1=driver.find_element_by_id("input1& ...
- Install Oracle 11G Release 2 (11.2) on Centos Linux 7
Install Oracle 11G Release 2 (11.2) on Centos Linux 7 This article presents how to install Oracle 11 ...
- 命令行客户端操作pg数据库常用操作
登录 # su - postgres -c "psql" 或者 $psql -U user_name -d database_name -h serverhost psql (10 ...
- POJ——1195Mobile phones(二维树状数组点修改矩阵查询)
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 17764 Accepted: 8213 De ...
- [BZOJ3535][Usaco2014 Open]Fair Photography
[BZOJ3535][Usaco2014 Open]Fair Photography 试题描述 FJ's N cows (1 <= N <= 100,000) are standing a ...
- Spark2.1.0之源码分析——事件总线
阅读提示:阅读本文前,最好先阅读<Spark2.1.0之源码分析——事件总线>.<Spark2.1.0事件总线分析——ListenerBus的继承体系>及<Spark2. ...
- AC自动机详解 (P3808 模板)
AC自动机笔记 0.0 前言 哇,好久之前就看了 KMP 和 Trie 树,但是似乎一直没看懂 AC自动机?? 今天灵光一闪,加上之前看到一些博客和视频,瞬间秒懂啊... 其实这个玩意还是蛮好理解的. ...
- Sequelize的增删改查
//启动mysql数据库 net start mysql //新建index.js //建立连接var Sequelize=require("sequelize");var mys ...