1] @PostConstruct 이용 or 프로필 사용
@Profile("local") // 아래 빈은 test에서는 동작하지 않고, 애플리케이션이 로딩될 때에만 동작한다.
@Component
@RequiredArgsConstructor
public class InitMember {
private final InitMemberService initMemberService;
@PostConstruct
public void init(){
initMemberService.init();
}
//Q. 아래에서 클래스를 선언하지 말고, @PostConstruct 메서드 안에 샘플 데이터를 입력하면 되는 것이 아닌가?
//A. 정확한 설명은 해주지 않았지만, @PostConstruct와 @Transactional의 라이프 사이클이 다르기에,
// 이 2 에노테이션을 동시에 붙이지는 못한다고 한다.
// 그래서 @PostConstruct와 Transaction이 동작하는 부분을 분리해줘야 한다고 한다.
static class InitMemberService{
@PersistenceContext
private EntityManager em;
@Transactional
public void init(){
Team teamA = new Team("teamA");
Team teamB = new Team("teamB");
em.persist(teamA);
em.persist(teamB);
for(int i = 0;i< 100;i++){
Team selectedTeam = (i % 2) == 0 ? teamA:teamB;
em.persist(new Member("member"+i));
}
}
2] beforEach() 이용
@BeforeEach
void beforeEach(){
queryFactory = new JPAQueryFactory(entityManager);
Team teamA = new Team("teamA");
Team teamB = new Team("teamB");
entityManager.persist(teamA);
entityManager.persist(teamB);
Member member1 = new Member("member1", 10, teamA);
Member member2 = new Member("member2", 10, teamA);
Member member3 = new Member("member3", 10, teamB);
Member member4 = new Member("member4", 10, teamB);
entityManager.persist(member1);
entityManager.persist(member2);
entityManager.persist(member3);
entityManager.persist(member4);
}
'CS 잡지식' 카테고리의 다른 글
동적(dynamic) 쿼리 vs 정적(static) 쿼리 (0) | 2023.05.19 |
---|---|
연관 관계 세팅 TIP!!! (0) | 2023.05.19 |
Querydsl 사용 시, 주의해야 할 버그(newInstance, ExpressException..) (0) | 2023.05.19 |
use_sql_comments: true (0) | 2023.05.17 |
Querydsl 사용 템플릿 (0) | 2023.05.17 |