【问题标题】:Spring boot create a duplication of record from mysqlSpring Boot 从 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 的记录,保存时它应该另存为新的 记录?

【问题讨论】:

    标签: java spring-boot spring-mvc jpa spring-data-jpa


    【解决方案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 小时后,我发现此代码有时会出现问题。我没有进行更多调查,而是切换到接受的答案方法。我让我的答案在这里发布并进行了编辑
        猜你喜欢
        • 2018-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-18
        • 1970-01-01
        • 2020-11-12
        • 1970-01-01
        • 2020-03-13
        相关资源
        最近更新 更多