jdk 21을 사용 중에 예외처리를 위해 @RestControllerAdvice를 사용하던 중 오류를 만났다 No enum constant javax.lang.model.element.Modifier.SEALED 엥? 그냥 콘솔에 떡하니 떠버리니 어떻게 할 수 없는 상황.. 검색해보니 딱히 정보도 없다. 없는 정보라도 긁어보니 뭔가 jdk 버전이 이상한 느낌이 들었다. 인텔리제이 -> file -> Project Structure 을 눌러 jdk를 확인해보던 중 language level이 17로 되어있는 것을 발견했다. (17 - sealType..) 오류에 나오는 SEALED과 비슷하단 생각이 들었고, 21버전이 없어 프로젝트 jdk 버전을 17로 낮췄다. 낮춘 뒤 다시 기동해본 결과 제대로 돌아간다..
토이 프로젝트를 진행함에 앞서 예외처리를 근사하게(?) 좀 실무에 가까운 방식으로 만들기 위한 이야기를 적어보려한다. 1. 서블릿 서블릿은 다음 2가지 방식으로 예외 처리를 지원한다. - Exception (예외) - response.sendError(HTTP 상태 코드, 오류메시지) try-catch에서 예외를 잡지 않으면 서블릿 밖으로 까지 전달되는데 어떻게 동작 될까? 이런 순으로 전파가 된다. 일단 기본부터 적어본다. - 서버 내부에서 처리할 수 없는 오류 : 500 - 페이지를 찾을 수 없는 오류 : 404 (not find) Exception (예외) WAS(여기까지 전파)
어쩔 수 없는 상황이 아니라면 가급적 사용하지 않는 것이 좋음 사용 법은 단순하다. @Query(value = "select * from member where username = ?" , nativeQuery = true) Member findByNativeQuery(String username); @Query에 nativeQuery를 true로 주면 끝이다. 프로젝션과 함께 사용하기 package study.datajpa.repository; public interface MemberProjection { Long getId(); String getUsername(); String getTeamName(); } @Query(value="select m.member_id as id, m.username..
projections이란 쉽게 말해서 쿼리에 셀렉트 절에 들어갈 데이터(필드) 라고 보면된다고 한다. 엔티티 대신에 DTO를 편리하게 조회할 때 사용 전체 엔티티가 아니라 만약 회원 이름만 딱 조회하고 싶으면? 1. 인터페이스를 하나 만든다. 값을 얻고싶은 메소드만 만들어주기 package study.datajpa.repository; public interface UsernameOnly { String getUsername(); } 2. repository에는 반환형태를 인터페이스 네임으로 붙여준다 List findProjectionByUsername(@Param("username")String username); } 3.메소드를 사용해서 반환한다. @Test public void projections..
@Test public void queryByExample(){ Team teamA = new Team("teamA"); em.persist(teamA); Member m1 = new Member("m1", 0, teamA); Member m2 = new Member("m2", 0, teamA); em.persist(m1); em.persist(m2); em.flush(); em.clear(); //probe 생성 Member member = new Member("m1"); //username 검색 Team team = new Team("teamA"); member.setTeam(team); //연관관계까지 검색해줌 //ExampleMatcher 생성 , age 프로퍼티는 무시 ExampleMatcher..
술어(predicate) - 참 또는 거짓으로 평가 - AND OR 같은 연산자로 조합해서 다양한 검색조건을 쉽게 생성(컴포지트 패턴) - 예) 검색 조건 하나하나 - 스프링 데이터 JPA는 'org.springframework.data.jpa.domain.Specification' 클래스로 정의 package study.datajpa.repository; import jakarta.persistence.criteria.*; import org.springframework.data.jpa.domain.Specification; import study.datajpa.entity.Member; import study.datajpa.entity.Team; public class MemberSpec { publ..
package study.datajpa.entity; import jakarta.persistence.Entity; import jakarta.persistence.Id; @Entity public class Item { @Id private String id; protected Item() { } public Item(String a) { } } package study.datajpa.entity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.sp..
data JPA 구현체는 SimpleDataJpa 객체이다. - 메소드를 확인하면 알겠지만, Tranjection이 걸려 있어서, 만약 트렌젝션을 서비스에서 걸지 않더라도 알아서 진행한다. (하지만 영속성턴텍스트를 이용해야하기 때문에 서비스에 걸어주는게 맞다) - JPA를 사용해도 여타 JDBC와 같은 예외가 나오도록 설정되어있다. /* * Copyright 2008-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a ..
- Total
- Today
- Yesterday
- rejectValue
- 향해99
- filter
- thymleaf
- Intercepter
- HTTP
- Java
- 항해플러스
- React
- 백엔드 개발자 역량
- reject
- hypertexttransferprotocol
- BindingResult
- 스프링부트
- react실행
- 향해플러스
- 항해99
- 스프링공부
- 백엔드 개발자 공부
- exception
- 컨트
- 예외처리
- JPA
- 리터럴
- SpringBoot
- jpa api
- 로그인
- ArgumentResolver
- 인터셉터
- 향해플러스백엔드
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
