전체 글
[Error] Update/delete queries cannot be typed
JPQL - EntityManager 로 쿼리 작성중 생긴 문제 update 또는 delete 쿼리를 작성할 수 없다 createQuery() 메서드의 매개변수로 들어가는 Query는 2가지 종류 1. Typed Query: 조회 대상과 반환형이 Entity인 쿼리 2. Query: 조회 대상과 반환형이 Entity가 아닌, 기본형 또는 Wrapper 클래스인 쿼리 update/delete 쿼리는 엔티티를 조회하지도, 반환하지도 않는다. 따라서 일반 쿼리문이므로 .class를 명시하지 않아야 함. 빼주면 해결된다
테스트용 더미 데이터 넣기 (no entitymanager with actual transaction available for current thread)
문제원인 빈 생명주기 콜백 메서드를 사용해서 더미 데이터를 DB에 넣으려고 하니 에러가 뜬다. no entitymanager with actual transaction available for current thread 구글링을 해보니 @PostConstruct에는 직접적으로 @Transactional을 적용할 수 없다고 한다. 그래서 인프런 커뮤니티에 달린 글을 찾아봤는데 찾은 내용이 다음과 같다. @PostConstruct는 해당 빈 자체만 생성되었다고 가정하고 호출됩니다. 해당 빈에 관련된 AOP등을 포함한, 전체 스프링 애플리케이션 컨텍스트가 초기화 된 것을 의미하지는 않습니다. 트랜잭션을 처리하는 AOP등은 스프링의 후 처리기(post processer)가 완전히 동작을 끝내서, 스프링 애플리케..
javax.persistence.NoResultException: No entity found for query
에러 로그 문제 원인 @Override public Member findByLoginId(String loginId) { return em.createQuery("select m from Member m where m.loginId = :loginId", Member.class) .setParameter("loginId", loginId) .getSingleResult(); } 쿼리의 결과값이 없을 때가 있을 수 있으니 try catch문으로 NoResultException 예외처리를 해주어야 한다 변경 후 @Override public Member findByLoginId(String loginId) { try{ return em.createQuery("select m from Member m wher..
검증 - 직접구현부터 Spring Validation 까지
오류 발생시 기본적으로 : 오류처리해야 하는 필드의 태그에는 class="field-error"를 붙인다 controller에서 폼에 빈 객체를 넘긴다.(Member) 이유는 여러가지가 있겠지만, 검증 실패시 이것을 재사용 할 수 있기 때문 검증에 실패하면 다시 입력 폼으로 보낸다. 1. 직접 처리 오류메시지가 하나라도 있으면 model에 Map(errors)를 담고 입력폼으로 보냄 StringUtils를 사용해서 if문으로 하나하나 조건을 달고 에러메시지를 담아줌. 필드에러: errors에 오류가 발생한 필드명(key), 오류(value) 저장 th:classappend="${errors?.containsKey('필드명')}?'field-error' : _" field-error라는 클래스 정보를 더해..
spring-boot-devtools
공식문서: https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.devtools 제공하는 기능: Hot Swapping (정적 리소스가 변경되어도 서버 재시작 없이 반영) H2 Console 자동 활성화 등등... Gradle 사용 시 build.gradle 설정 : developmentOnly("org.springframework.boot:spring-boot-devtools") applicatoin.propeties 설정 : spring.thymeleaf.cache=false spring.devtools.remote.restart.enabled=true 타임리프 사용 중이므로 윗 줄도 들어갔습니다. Intelli..