STUDY

    [TIL] SQLSyntaxError ( 컬럼명 like 문제)

    발생한 예외 create table posts ( id bigint not null auto_increment, created_at datetime(6), modified_at datetime(6), contents varchar(255), like bigint, title varchar(255) not null, user_id bigint, primary key (id) ) engine=InnoDB" via JDBC [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 'like bigint, title varchar..

    [TIL] AnnotationException 예외 발생 (mappedBy)

    발생한 예외 내용 Caused by: org.hibernate.AnnotationException: Collection 'com.example.jisoo_blog.entity.Post.comments' is 'mappedBy' a property named 'posts' which does not exist in the target entity 'com.example.jisoo_blog.entity.Comment' 해석해보면 Post의 comments 콜렉션이 posts와 mappedBy되어 있는데, Comment Entity에는 그런 필드명이 없다. 는 것 같다. Post의 코드 @Table(name="posts") public class Post extends Timestamped { @Id @Gen..

    [TIL] DefaultHandlerException 예외발생(추가공부 필요)

    이슈 GET요청을 받아올 때, 다음과 같은 예외 발생 2023-07-14T04:34:09.773+09:00 WARN 11788 --- [nio-8080-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException : No acceptable representation] 컨트롤러 단의 코드 @GetMapping("/view/all") public ResponseEntity getPosts() { PostsResponseDto result = postService.getPosts(); return ResponseEntity.ok().body(result)..

    [TIL] http.authorizeHttpRequests.requestMatchers API 설정(정확한 해결 방법 추가 기록 필요)

    이슈 스프링 부트로 블로그를 만드는 과제를 하고 있는데 내가 작성한 포스트 조회에 대한 API 명세서는 이러하였다. 이름 Method URL 전체 게시글 조회 GET /JisooBlog 선택 게시글 조회 GET /JisooBlog/1 이 두 기능은 인가 필터와 인증 필터를 거치지 않고 비회원에도 보여질 수 있게끔 하기 위해서 설정이 필요했다. WebSecurityConfig 클래스에서 http.authorizeHttpRequests.requestMatchers 설정을 해주면 되겠다 생각해서 http.authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers(PathRequest.toStaticResource..

    [4-1] JPA - DDL 자동 생성

    [4-1] JPA - DDL 자동 생성

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 데이터베이스 스키마 자동 생성 DDL을 애플리케이션 실행 시점에 자동 생성(Data Definition Language : 데이터베이스 스키마를 정의하는 일련의 SQL 명령), 어플리케이션 실행 시점에 Entity를 인식하여 데이터베이스 테이블을 만들고 인식된 Column을 자동 생성한다. 테이블 중심 → 객체 중심 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성 이렇게 생성된 DDL은 개발 장비에서만 사용, 운영에서는 사용 X 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용 속성 : hibernate.hbm2ddl.auto create : 기존테이블 삭제 후 다시 생성 ( DROP + CREAT..

    [3-4] 준영속 상태

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 준영속 상태 영속상태에서 준영속 상태가 되는 것 영속 상태가 되는 경우 : persist(), find()해서 1차 캐시에 없을 때 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(datached) 영속성 컨텍스트가 제공하는 기능을 사용하지 못함 ( ex. 더티체킹 ) 준영속 상태로 만드는 방법 em.datach(entity) 특정 엔티티만 준영속 상태로 전환 Member member = em.find(Member.class, 150L); // 영속 상태 member.setName("AAAAA"); em.detach(member); // 준영속 상태 System.out.println("========================="); tx..

    [3-3] 플러시

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 플러시란? 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것! 트랜잭션이 커밋될 때 플러시가 일어난다. 영속성 컨텍스트의 쿼리를 DB에 날려준다. 플러시가 발생되면 어떤 일이 일어나는가? 변경 감지가 일어남. 수정된 엔티티에 대하여 쓰기 지연 SQL 저장소에 쿼리가 등록된다.등록된 쿼리를 DB에 전송(등록, 수정, 삭제 쿼리) 플러시가 발생한다고 해서 DB 트랜잭션이 커밋되는 것은 아니다. 영속성 컨텍스트를 플러시하는 방법 직접 쓸 일은 없는데 테스트해보려면 알아야 한다. 1. em.flush() > 직접 호출 Member member = new Member(200L, "member200"); em.persist(member); em..

    [3-2] 영속성 컨텍스트의 이점 (+Batch)

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 영속성 컨텍스트의 이점 1. 1차 캐시 저장 Entity를 영속성 컨텍스트에 저장할 때, EntityManager가 Entity를 영속성 컨텍스트의 1차 캐시에 저장한다. em.persist(member)이후 find를 넣었는데 쿼리는 commit할 때 나간다. DB단에서 조회해오지 않고, 1차 캐시에서 조회해 오기 때문. // 비영속 Member member = new Member(); member.setId(101L); member.setName("HelloJPA"); //영속 System.out.println("=== BEFORE ==="); em.persist(member); System.out.println("=== AFTER =..

    [3-1] 영속성 컨텍스트란?

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기(Object Relational Mapping) 영속성 컨텍스트(JPA가 내부에서 어떻게 동작하는가) EntityManagerFactory와 EntityManager 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어 "엔티티를 영구 저장하는 환경"이라는 뜻 EntityManager.persist(entity); DB에 저장 X, 영속성 컨텍스트를 통해서 Entity를 영속화한다.는 뜻. 좀 더 정확히 말해서 영속성 컨텍스트에 entity를 저장한다는 것 EntityManager? 영속성 컨텍스트? 영속성 컨텍스트는 논리적인 개념이고, 눈에 보이지 않는다 EntityMan..

    [2-1] JPA 시작하기

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 데이터베이스 방언 JPA는 특정 데이터베이스에 종속되지 않는다. 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다르다. 방언 : SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능 어플리케이션을 설정할 때, 어떤 방언으로 변환하여 쿼리를 날려야 할지 정해 줄 수 있다. hibernate는 40가지 이상의 데이터베이스 방언을 지원한다. ex. H2 데이터베이스 쿼리로 바꿔서 날려줘~ JPA 구동 방식 Persistence가 MeTA-INF/persistence.xml에서 설정 정보를 조회 Persistence가 EntityManagerFactory 생성 EntityManagerFactory가 EntityManager 생..