작성
·
225
0
antlr.NoViableAltException: unexpected token:generatedAlias0
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: generatedAlias0 near line 1, column 8 [select generatedAlias0 from...]
이 부분에서 계속 에러가 뜨는데 이유를 모르겠어서 질문드려요!
참고로 이와 비슷한 문의 글도 인프런과 stackoverflow에서 봤지만, 마땅한 오타가 없어서 여기에 글 올립니다!
// MemberServiceIntegrationTest
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Commit;
import org.springframework.transaction.annotation.Transactional;
import with.younghan.kim.domain.Member;
import with.younghan.kim.repository.MemberRepository;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {
@Autowired MemberService memberService;
@Autowired MemberRepository memberRepository;
@Test
void 회원가입() {
//given
Member member = new Member();
member.setName("spring100");
//when
Long saveId = memberService.join(member);
//then
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
@Test
public void 중복_회원_예외() {
//given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
//when
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
}
// MemberService
import org.springframework.transaction.annotation.Transactional;
import with.younghan.kim.domain.Member;
import with.younghan.kim.repository.MemberRepository;
import java.util.List;
import java.util.Optional;
@Transactional
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
/**
* 회원 가입
*/
public Long join(Member member) {
validateDuplicateMember(member); //중복 회원 검증
memberRepository.save(member);
return member.getId();
}
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}
/**
* 전체 회원 조회
*/
public List<Member> findMembers() {
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId) {
return memberRepository.findById(memberId);
}
}
// JpaMemberRepository
import with.younghan.kim.domain.Member;
import javax.persistence.EntityManager;
import java.util.List;
import java.util.Optional;
public class JpaMemberRepository implements MemberRepository {
private final EntityManager em;
public JpaMemberRepository(EntityManager em) {
this.em = em;
}
@Override
public Member save(Member member) {
em.persist(member);
return member;
}
@Override
public Optional<Member> findById(Long id) {
Member member = em.find(Member.class, id);
return Optional.ofNullable(member);
}
@Override
public Optional<Member> findByName(String name) {
List<Member> result = em.createQuery("select m from Member m where m.name = :name", Member.class)
.setParameter("name", name)
.getResultList();
return result.stream().findAny();
}
@Override
public List<Member> findAll() {
return em.createQuery("select m from Member m", Member.class)
.getResultList();
}
}
// Member
import javax.persistence.*;
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
답변 1
0
안녕하세요. 조준형님, 공식 서포터즈 OMG입니다.
전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.
구글 드라이브 업로드 방법 링크주의: 업로드시 권한 문제 꼭 확인해주세요
감사합니다.
프로젝트 코드 확인해봤습니다.
우선 동일한 문제가 발생하여 다음과 같은 이유인지 확인해보았습니다.
1.코드오류(오타 등)
2.build.gradle관련 오류
3.프로젝트 폴더 자체의 오류(기타 설정이 적용되었는지,패키지 경로 등)
4.db테이블 오류
우선 1,2는 확실히 아닙니다.
3번 오류 혹은 4번 오류로 예상하여 프로젝트를 새로 만들고 강의와 동일하게 했을 시 문제는 없었습니다.(application.properties만 수정)
우선 아래 프로젝트를 실행해서 확인해주세요.
https://drive.google.com/file/d/1lsPpwvWC3fTBuH8KqeO1iFxBIj8Ha37S/view?usp=sharing
동일한 문제가 발생한다면 4번 예상인 테이블 오류로 예상되며,
강의를 참고하여 새로운 db를 만들어서 확인해주세요(test.mv.db 가아닌 test2.mv.db와 같이)
https://drive.google.com/file/d/1EMqzQ2YA7T3L6T4FYTw6SxT0mdSvQ3-D/view?usp=sharing