전체 글

전체 글

    [Error] Update/delete queries cannot be typed

    [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)

    테스트용 더미 데이터 넣기 (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

    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

    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..