작성
·
207
1
CompStdRepository.java
/**
* ID로 조회
*/
public CompStd findOne(Long id) {
return em.find(CompStd.class, id);
}
/**
* API ID로 조회
*/
public CompStd findOneByApiId(String apiId) {
String query = "select c From CompStd c where c.apiId = :apiId";
return em.createQuery(query, CompStd.class)
.setParameter("apiId", apiId)
.getSingleResult();
}
CompStdService.java
/**
* ID로 조회
*/
public CompStd findOne(Long id) {
return compStdRepository.findOne(id);
}
/**
* API ID로 조회
*/
public CompStd findOneByApiId(String apiId) {
return compStdRepository.findOneByApiId(apiId);
}
CompStdServiceTest.java
@Test
void API_ID로_조회() {
//given
Long createdId = compStdService.insert(getCompStd());
CompStd insertedCompStd = compStdRepository.findOne(createdId);
//when
CompStd findCompStd = compStdRepository.findOneByApiId(insertedCompStd.getApiId());
//then
assertEquals(insertedCompStd, findCompStd);
}
1. 다음과 같이 테스트를 작성하였는데 이게 JPQL 조회 기능을 테스트하는 코드로서 올바르게 작성된 건지 궁금합니다.
2. 테스트에서 em.find()로 조회한 객체와 JPQL을 통하여 조회한 객체가 같은 이유는 em.find()로 조회하여 영속성 컨텍스트에 저장된 객체를 JPQL로 조회할 때 객체의 기본 키로 확인하여 같은 객체를 가져오기 때문이라고 보면 될까요?
답변 1
1
안녕하세요, Mx 님. 공식 서포터즈 codesweaver 입니다.
.
1. apiId가 중복없이 유일한 값이라는것이 전제된다면, 해당 테스트는 문제 없는것 같습니다.
2. 네 createId와 apiId가 동일한 키라는 전제하에 테스트가 통과될것 같습니다.
.
감사합니다.