jpa 테스트 도중 에러가 여러번 발생하였다.
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "select mytableent0_.pk as pk1_0_, mytableent0_.[*]value as value2_0_ from mytable mytableent0_"; expected "identifier"; SQL statement:
select mytableent0_.pk as pk1_0_, mytableent0_.value as value2_0_ from mytable mytableent0_ [42001-214]
위와 같은 에러가 발생하였었는데, h2 의존성을 주입하여 생긴 문제였다.
=> h2 의존성 삭제
Unsatisfied dependency expressed through method 'dataSourceScriptDatabaseInitializer' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException:
위 문제를 해결 후 위와 같은 문제가 발생하였다.
내 코드에서 @DataJpaTest
를 사용하였다. 해당 어노테이션 사용시 다음과 같은 어노테이션이 자동으로 적용된다
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@BootstrapWith(DataJpaTestContextBootstrapper.class)
@ExtendWith(SpringExtension.class)
@OverrideAutoConfiguration(enabled = false)
@TypeExcludeFilters(DataJpaTypeExcludeFilter.class)
@Transactional
@AutoConfigureCache
@AutoConfigureDataJpa
@AutoConfigureTestDatabase
@AutoConfigureTestEntityManager
@ImportAutoConfiguration
public @interface DataJpaTest {
}
이때 @AutoConfigureTestDatabase
어노테이션은 내장 메모리 데이터베이스를 이용하여 테스트를 진행시켜준다.
하지만 이때 나는 물리적인 mariadb에 연결하여 테스트를 진행하려 하였기에 발생한 문제였다.
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class MyjpaApplicationTests {
...
]
위와 같은 옵션을 추가 후 정상적으로 jpa가 작동하는것을 확인할 수 있었다.
출처
jpa에서 custom repository를 생성하여 테스트 중, findAll을 cuostom 하여 사용해보았다.
@Override
public List<MyTableEntity> findCustomAll() {
String sql = "SELCT * FROM mytable";
return entityManager.createQuery(sql,MyTableEntity.class).getResultList();
}
결과는 *를 읽을 수 없다며 syntax error를 발생시켰다.
구글링후 확인결과
@Override
public List<MyTableEntity> findCustomAll() {
String sql = "SELECT m FROM mytable as m";
return entityManager.createQuery(sql,MyTableEntity.class).getResultList();
}
위와 같은 형태로 작성하여야 정상적으로 동작한다.