spring data jpa : Projections
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.example.springdatajpa.repository;
|
||||
|
||||
public interface NestedClosedProjections {
|
||||
|
||||
String getUsername();
|
||||
TeamInfo getTeam();
|
||||
|
||||
interface TeamInfo {
|
||||
String getName();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user