JPA中Save方法有Id保存也会新增一条新的数据问题

从源码入手

    @Transactional
    @Override
    public <S extends T> S save(S entity) {

        if (entityInformation.isNew(entity)) {
            em.persist(entity);
            return entity;
        } else {
            return em.merge(entity);
        }
    }

判断ID是否为空

    @Transient // DATAJPA-622
    @Override
    public boolean isNew() {
        return null == getId();
    }

判断 id 是否一致

    @Override
    public boolean isNew(T entity) {

        if (!versionAttribute.isPresent()
                || versionAttribute.map(Attribute::getJavaType).map(Class::isPrimitive).orElse(false)) {
            return super.isNew(entity);
        }

        BeanWrapper wrapper = new DirectFieldAccessFallbackBeanWrapper(entity);

        return versionAttribute.map(it -> wrapper.getPropertyValue(it.getName()) == null).orElse(true);
    }

如果还是新增,说明ID不一致,可能数据库没有对应的ID

 

posted on 2020-12-16 10:48  a阳光倾城  阅读(2164)  评论(0)    收藏  举报