@3/8/2023
DB Dialect 에러
•
테스트 코드를 작성하고 돌리는데 Table 'springforumdb.user' doesn't exist 라면서 오류 발생함
◦
생각해보니 테스트 폴더에 설정파일이 누락돼있었음
•
설정파일을 일단 복붙해서 돌리니 다음 에러가 남
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "
create table comment (
comment_id bigint not null auto_increment,
content varchar(255),
reg_date datetime,
post_id bigint,
user_id bigint,
primary key (comment_id)
) type=MyISAM" via JDBC Statement
...
Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=MyISAM' at line 8
Plain Text
복사
◦
MySQL8Dialect 로 바꿔보니 잘 됨. @Transactional 주석처리하니 DB에 테이블도 잘 만들어짐
getSingleResult()의 NoResultException 문제
UserService 클래스의 join 메서드 중복 제거 부분에서 아래 오류가 남
No entity found for query
if (userRepository.findByName(userForm.getName()).isPresent()) {
throw new IllegalStateException("이미 존재하는 회원입니다");
}
Java
복사
보니까 UserRepository에서
public Optional<User> findByName(String name) {
return Optional.ofNullable(
em.createQuery("select u from User u where u.name = :name", User.class)
.setParameter("name", name)
.getSingleResult());
}
Java
복사
getSingleResult()를 한 부분이 문제였음. 얘는 결과가 없으면 NoResultException을 터뜨려서 논란이 많은 아이임. 이를 getResultSet()으로 고쳐서 결과가 없더라도 예외가 나지 않도록 수정함
해보니 getResultSet()은 결과가 없으면 null이 아니라 빈 리스트를 반환함( 참조).
람다식 → 람다 표현식
IDE가 람다식을 바꾸는걸 자꾸 추천해주길래 바꿔봄
Assertions.assertThrows(IllegalStateException.class, () -> {
userService.findUser(foundUser.getId());
});
Java
복사
Assertions.assertThrows(IllegalStateException.class, () -> userService.findUser(foundUser.getId()));
Java
복사
위처럼 바뀌는데, 개인적으로 중괄호를 좋아하기 때문에 그냥 원복함