- JPA의 기본적인 save()
JPA의 기본적인 save(S s) 의 경우 먼저 select 를 하여 중복이 있는지 확인하고, 중복이 있을 경우 Update, 중복이 없으면 Insert 작업을 수행한다.
이 과정에서 입력되는 데이터의 수가 많을 수록 JDBC Insert와의 성능차이가 심하게 드러났다.
2. SELECT 하지 않고 무조건 저장하기
@Entity
@Table(name = "tb_battery")
@Getter
public class Battery implements Persistable<BatteryPK> {
@EmbeddedId
private BatteryPrimaryKey batteryPrimaryKey;
...
}
@Embeddable
@AllArgsConstructor
@NoArgsConstructor
public class BatteryPrimaryKey {
private String 고객아이디;
private String 장치아이디;
private String 날짜;
}
위 코드의 Persistable<ID> 상속 한 후 isNew함수를 수정하여 항상 참을 반환하게 하면 모든 해당 Entity의 모든 INSERT에 대하여 SELECT 없이 동작이 가능하다.
3. Bulk Insert
나는 saveAll() 함수가 bulk Insert 작동하길 기대하였으나,
실제로는 컬럼 당 한번씩 INSERT하는 방식으로 작동하였다.
4. 그렇다면 한번에 많은 데이터를 Insert하려면?
JdbcTemplate의 batchUpdate() 를 활용하면 한번에 많은 데이터 INSERT가 가능하다.
해당 예제는 다음 포스트에 이어서 진행하도록 하겠다.