JPA err

akanana·2023년 1월 5일
0

개인공부

목록 보기
1/30
post-thumbnail

jpa 에러


jpa 테스트 도중 에러가 여러번 발생하였다.

errror 1

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 의존성 삭제

error 2

Unsatisfied dependency expressed through method 'dataSourceScriptDatabaseInitializer' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: 

위 문제를 해결 후 위와 같은 문제가 발생하였다.

@AutoConfigureTestDatabase??

내 코드에서 @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가 작동하는것을 확인할 수 있었다.

출처

select * from mytable


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();
}

위와 같은 형태로 작성하여야 정상적으로 동작한다.

createQuery vs createNativeQuery

0개의 댓글