Spring JPA Repository - 单独的插入和更新方法

Yos*_*nar 5 java spring spring-data-jpa

如何从 Spring JPA Repository 创建自定义方法来分离插入和更新功能?假设insertcreate 方法update 的 update 方法

额外的问题: 为什么 Spring JPA Repository 没有按设计将这些方法分开?

我当前的实现是在服务层创建验证

我的仓库

public interface UserRepository extends CrudRepository<User, Integer> {}
Run Code Online (Sandbox Code Playgroud)

我的服务

@Service
public class UserService {
    public void addUser(User user) {
        if (!userRepository.exists(user.getId())) {
            userRepository.save(user);
        }
    }

    public void updateUser(int id, User user) {
        if (userRepository.exists(user.getId())) {
            userRepository.save(user);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Dud*_*ama 2

可以为标准 Spring 数据存储库提供您自己的扩展:

将自定义行为添加到所有存储库:

https://docs.spring.io/spring-data/data-commons/docs/current/reference/html/#repositories.custom-behaviour-for-all-repositories

例如,您可以实现锁定功能

void lock(T entity, LockModeType lockModeType);
Run Code Online (Sandbox Code Playgroud)

但就你而言,我建议不要进行检查,因为 SpringDataRepository 已经检查了它是否是新的。如果有 ID,它无论如何都会存在,因为您希望不要创建自己的 ID。这是 Spring 数据契约的一部分:

SimpleJpa存储库:

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

    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}
Run Code Online (Sandbox Code Playgroud)