save 메소드를 호출 했을 때 새로운 엔티티면 persist 아니면 merge 한다고 했었다.

이 부분에서 isNew 메소드에 대해서 설명하는 것이다.

문제

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Item {

	@Id
	private String id;

	public Item(String id) {
		this.id = id;
	}
}
@Test
public void save() {
	itemRepository.save(new Item("A"));
}

Id 값이 있다.

merge가 호출되기 때문에

셀렉트 쿼리가 호출 되었다!!!

해결

Persistable 이라는 인터페이스를 이용해야 한다.