Spring Boot 从 mysql 创建重复记录

Posted

技术标签:

【中文标题】Spring Boot 从 mysql 创建重复记录【英文标题】:Spring boot create a duplication of record from mysql 【发布时间】:2020-08-12 03:39:04 【问题描述】:

我有数据记录

实体在主键中如下给出

@GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    @Column(name = "id",unique = true,nullable = false)
    public Long id;

我尝试过甚至尝试过的对象映射器还有一些其他问题

Record abc =dao.findById(11);
abc.setId(Null); //not working  
dao.save(abc) //not working

所以我想做的是一条主键为 1 的记录,保存时它应该另存为新的 记录?

【问题讨论】:

【参考方案1】:

你应该创建一个新对象:

Record abc =dao.findById(11);
Record def = new Record(abc);
dao.save(def)

在 Record 类中,你应该有这样的构造函数:

public Record()
public Record(Record rec)
    this.field1 = rec.field1;

【讨论】:

【参考方案2】:

您可以通过创建另一个对象来做到这一点。使用 beanUtils 克隆对象...

试试这个:

        Record abc =dao.findById(11);
        Record copyAbc = new Record();
        org.springframework.beans.BeanUtils.copyProperties(copyAbc,abc);
        copyAbc.setId(null);
        dao.save(copyAbc);

【讨论】:

【参考方案3】:

你可以这样做

从 EntityManager 中分离您的实体 将 id 设置为 null 保存实体
@PersistenceContext
EntityManager em;

...

em.detach(entity)

编辑:看来我的回答有一些问题。请不要使用它,我终于使用了接受的答案

【讨论】:

在发布我的答案 2 小时后,我发现此代码有时会出现问题。我没有进行更多调查,而是切换到接受的答案方法。我让我的答案在这里发布并进行了编辑

以上是关于Spring Boot 从 mysql 创建重复记录的主要内容,如果未能解决你的问题,请参考以下文章

从零一起学Spring Boot之LayIM项目长成记 初见 Spring Boot

Spring Boot 实践折腾记:三板斧,Spring Boot下使用Mybatis

记spring boot线上项目内存优化

(汇总)Spring Boot 实践折腾记 & Spring Boot 2.x 实践记

Dockerized Spring Boot 应用程序连接到主 MySQL [重复]

Spring Boot 连接MySql数据库