-
Spring - JPA on duplicate key update (MySQL)Spring 2024. 2. 13. 20:34반응형
MySQL에서 데이터가 없을 때는 INSERT, 데이터가 있을 때는 UPDATE를 수행하는 방법 중 하나가
INSERT ON DUPLICATE KEY UPDATE 구문을 사용하는 것입니다.
INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...) ON DUPLICATE KEY UPDATE 컬럼1 = 값1, 컬럼2 = 값2, ...;
그러나 Spring Data JPA 직접적으로 INSERT ON DUPLICATE KEY UPDATE 구문을 지원하지 않습니다.
ON DUPLICATE KEY UPDATE는 MySQL과 같은 특정 데이터베이스에 특화된 기능이기 때문입니다.
그래서 JPA에서 ON DUPLICATE KEY UPDATE 구문을 사용하려면 @Query 어노테이션을 사용해야 합니다.
다음은 Spring Data JPA에서 native query를 사용하여 ON DUPLICATE KEY UPDATE 동작을 수행하는 예시입니다
Entity 클래스
@Entity public class YourEntity { @Id private Long id; private String column1; private String column2; }
Repository
@Repository public interface YourEntityRepository extends JpaRepository<YourEntity, Long> { @Modifying @Query(value = "INSERT INTO your_table (id, column1, column2) VALUES (:id, :column1, :column2) " + "ON DUPLICATE KEY UPDATE column1 = :column1, column2 = :column2", nativeQuery = true) void insertOrUpdate(@Param("id") Long id, @Param("column1") String column1, @Param("column2") String column2); }
Service
@Service public class YourService { @Autowired private YourEntityRepository repository; public void saveOrUpdateYourEntity(YourEntity entity) { repository.insertOrUpdate(entity.getId(), entity.getColumn1(), entity.getColumn2()); } }
반응형'Spring' 카테고리의 다른 글
Spring - JPA @Modifying return value (0) 2024.03.25 Spring - JPA distinct 여러 컬럼 사용하기 (0) 2024.03.12 Spring - JPA Entity에서 @Column 필드 리스트로 만들기 (0) 2024.02.13 Spring - Resilience4j circuit breaker example (0) 2024.01.09 Spring - JPA Executing an update/delete query 에러 (0) 2023.10.17