spring data jpa : Projections

This commit is contained in:
haerong22
2021-09-03 23:22:16 +09:00
parent a498be6f2c
commit 0260422403
5 changed files with 63 additions and 0 deletions

View File

@@ -68,4 +68,8 @@ public interface MemberRepository extends JpaRepository<Member, Long>, MemberRep
@Lock(LockModeType.PESSIMISTIC_WRITE)
Member findLockByUsername(String username);
// List<UsernameOnlyDto> findProjectionsByUsername(@Param("username") String username);
<T> List<T> findProjectionsByUsername(@Param("username") String username, Class<T> type);
}

View File

@@ -0,0 +1,11 @@
package com.example.springdatajpa.repository;
public interface NestedClosedProjections {
String getUsername();
TeamInfo getTeam();
interface TeamInfo {
String getName();
}
}

View File

@@ -0,0 +1,9 @@
package com.example.springdatajpa.repository;
import org.springframework.beans.factory.annotation.Value;
public interface UsernameOnly {
// @Value("#{target.username + ' ' + target.age}")
String getUsername();
}

View File

@@ -0,0 +1,14 @@
package com.example.springdatajpa.repository;
public class UsernameOnlyDto {
private final String username;
public UsernameOnlyDto(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
}

View File

@@ -358,5 +358,30 @@ public class MemberRepositoryTest {
assertEquals("member1", result.get(0).getUsername());
}
@Test
void projections() {
// given
Team teamA = new Team("teamA");
em.persist(teamA);
Member member1 = new Member("member1", 0, teamA);
Member member2 = new Member("member2", 0, teamA);
em.persist(member1);
em.persist(member2);
em.flush();
em.clear();
// when
List<NestedClosedProjections> nestedClosedProjections = memberRepository.findProjectionsByUsername("member1", NestedClosedProjections.class);
List<UsernameOnlyDto> usernameOnlyDtos = memberRepository.findProjectionsByUsername("member1", UsernameOnlyDto.class);
List<UsernameOnly> usernameOnlyList = memberRepository.findProjectionsByUsername("member1", UsernameOnly.class);
for (NestedClosedProjections nestedClosedProjection : nestedClosedProjections) {
System.out.println("nestedClosedProjections.getUsername() = " + nestedClosedProjection.getUsername());
System.out.println("nestedClosedProjections.getTeam().getName() = " + nestedClosedProjection.getTeam().getName());
}
}
}