스프링 데이터 JPA 최신버전에 생긴 기능

실무에서 사용하기 애매하다.

실습

@Test
public void queryByExample() {
	Team teamA = new Team("teamA");
	em.persist(teamA);

	Member m1 = new Member("m1", 0, teamA);
	Member m2 = new Member("m2", 0, teamA);
	em.persist(m1);
	em.persist(m2);

	em.flush();
	em.clear();

	Member member = new Member("m1");
	Example<Member> example = Example.of(member);

	List<Member> result = memberRepository.findAll(example);

	assertThat(result.size()).isEqualTo(1);
	assertThat(result.get(0).getUsername()).isEqualTo("m1");
}
@Test
public void queryByExample() {
	Team teamA = new Team("teamA");
	em.persist(teamA);

	Member m1 = new Member("m1", 10, teamA);
	Member m2 = new Member("m2", 20, teamA);
	em.persist(m1);
	em.persist(m2);

	em.flush();
	em.clear();

	Member member = new Member("m1");
	ExampleMatcher matcher = ExampleMatcher.matching()
			.withIgnorePaths("age");
	Example<Member> example = Example.of(member, matcher);

	List<Member> result = memberRepository.findAll(example);

	assertThat(result.size()).isEqualTo(1);
	assertThat(result.get(0).getUsername()).isEqualTo("m1");
}

영한님은 이러한 기술을 볼 때 조인이 해결 되는지 보면 쓸만한지 알 수 있다.

단점

m1 이면서 팀이 teamA 인 멤버를 조회해 보자.

@Test
public void queryByExample() {
	Team teamA = new Team("teamA");
	em.persist(teamA);

	Member m1 = new Member("m1", 10, teamA);
	Member m2 = new Member("m2", 20, teamA);
	em.persist(m1);
	em.persist(m2);

	em.flush();
	em.clear();

	Member member = new Member("m1");
	Team team = new Team("teamA");
	member.setTeam(team);
	ExampleMatcher matcher = ExampleMatcher.matching()
			.withIgnorePaths("age");
	Example<Member> example = Example.of(member, matcher);

	List<Member> result = memberRepository.findAll(example);

	assertThat(result.size()).isEqualTo(1);
	assertThat(result.get(0).getUsername()).isEqualTo("m1");
}