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

标签 java spring spring-data-jpa

如何从 Spring JPA 存储库创建分离插入和更新功能的自定义方法?假设创建插入方法更新更新方法

额外问题: 为什么 Spring JPA Repository 没有在设计上分离这些方法?

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

我的存储库

public interface UserRepository extends CrudRepository<User, Integer> {}

我的服务

@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);
        }
    }
}

最佳答案

可以为标准 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);

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

SimpleJpaRepository:

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

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

关于java - Spring JPA Repository - 单独的插入和更新方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42199795/

相关文章:

java - Android 中的问答游戏无法获得分数

java - 无法更改嵌套 ArrayList 中的元素

java - 一起使用 JDBC 和 Hibernate 4 进行 Spring 事务管理

java - 使用 map 保存实体

java - com.fasterxml.jackson.databind.exc.MismatchedInputException : Can not deserialize instance of object out of START_ARRAY token

java - 隐藏结果集中的行

java - 执行 PHPUnit_Selenium

java - 将两个实体(学生、类(class))迭代的列表传递给 spring View

java - Spring security oauth2 修改响应主体连接

spring - JpaRepository中的自定义删除方法