SpringBoot 쫌 한다는 사람은 JPA를 쓸 줄 안다고한다.Mybaits 공부할때 😈 "JPA도 공부해야해" 😈 "JPA가 더 좋아" 이런소리 너무 많이 들어서 JPA가 뭔지 몰라도 JPA 공부해야한다는 압박감을 가지고 있었다.JPA쫌 쓸 줄 안다고 Mybat
JPA에 대해서 공부하기 위해 H2 In-Memory DB에 대해서 공부해보자.✅ H2 DB는자바 기반의 경량화된 데이터베이스이고 파일로저장해서 실제 DB처럼쓰인다.메모리 디비로 사용해서 실제 인스턴스 동작시 쓰이기도 하고, Test DB로 쓰이기도 하고, 유지보수 할
자바객체와 DB 테이블과 연결해주는 것이 ORM 이라고 했는데,여기서 자바객체를 Entity라고 한다. 그래서 어노테이션 엔티티를 사용하여 쉽게 엔티티를 나타낼수 있다.🤔 왜 오류가 뜰까?기본적으로 엔티티에는 기본키가 있어야 하기때문이다.를 추가해 주자.✅ 이렇게 U
Data.sql 파일을 리소스 하위에 두면 jPA가 로딩할때 해당 쿼리를 한번 실행해 준다.!!!!Test할때 개 꿀~이렇게 미리 들어갈 dml을 넣어준다.Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Sequence "H
🤔✅👉😎🤚😮 🤔 실제로 서비스에서는 WHERE 조건이 복잡할탠데...어떻하지? QueryMethod 활용 JPA 사용할 때 QueryMethod가 많은 해택을 받는다. 레파지토리에 네이밍베이스로 선언만 하면 Query를 불러올수있다. 하지만 먼저 QueryM
🤔 왼쪽에서 첫번째, 오른쪽에서 첫번째, 앞에서 첫번째, 뒤에서 첫번째,,,,여러게 중에 하나는 순서에 따라 다른다.👉 지난번에 했던 findLastByName 같은건 order by를 하고 첫번째를 선택해야한다고 했다.그렇듯 Sort는 중요하다.👉 그럼 Page
🤔Entity 도매인 객체인 Entity는 실습을 통해 공부해보자. ✅ GenerationType 이 뭘까? GenerationType을 설정해보자. ✅ GenerationType (Table) 👉 Test를 해보면 👉 Test가 수행될때 table을
엔티티 리스너란? 이벤트를 관찰하고 있다가, 이벤트가 발생하면 특정 동작을 진행하는 것. Entity리스너 이기 때문에 엔티티가 동작하는 몇가지 방법에 이벤트를 리스닝 하고 있다.✅ Entity에 Listener설정위와같이 Entity에 설정해 두면 trigger처럼
BaseEntity에 created_at,updated_at 있다는거 있지 말자.id가 6으로 시작하는 이유는 H2 DB는 GeneratedValue가 AUTO이면 시퀀스 전략을 가진다.시퀀스는 id 값을 1을 높이는데 Entity관계 없이 올라간다. 즉 User En
위의 user Table과 user_history는 1대 N 관계를 가진다.UserHistory의 userId 값이 null로 들어가게 되는데.. 이유는 PrePersist를 사용하여 디비에 들어가기 전에 쿼리를 때려서 그런거 같다. 그럼 PostPersist로 변경해
OneToMany 에서는 참조되는 값을 One에서 가지고 있지 않다. 만약 가져야 한다면UserHistoryId가 1,2,3,4,5 즉 어떤 값의 배열이 된다. 그래서 One에 해당하는 PK ID를 Many쪽에서 FK이다.일반적인 상황에서는 @ManyToOne이 더 자
😈 참고로 ManyToMany는 잘 안쓰고 중간에 맵핑 엔티티(테이블)을 만들어서 사용한다. BookAndAuthor라고 만들꺼지만 네이밍은 원래 이렇게 하면 안된다. Author Entity Book Entity BookAndAuthor Entity TEST 해보자 연관관계는 여기서 끝이다. JPA 연관관계 많이 복잡할수 있지만, 잘 활용하면 ...
영속성 컨텍스트 알아보자 Persistence Context : 영속성 맥락 ✅ 프레임웍에서 주로 컨테이너들이 관리 비슷 스프링의 빌드를 모두 로딩하고 관리하는 작업은 스프링 Context위에서 작동한다. 즉 Persistence Cantainer가 관리하는 내용이라
🤔 영속성 컨텍스트는 일종의 JPA 컨테이너 안에서 동작하는 entity의 맥락을 관리하는 것이다. 이 안에서 entity는 생성되고 지워지고 조회된다. 그 context 안에서 가장 중요한 역활을 하는 것이 EntityManager 객체이다. 이 역활을 알아보고,
😎 영속성컨텍스트에서 가장 주체가 되는 클래스는 엔티티메니져객체이다. 엔티티는 하나의 객체이기 때문에 엔티티와 DB레코드 사이에 어떻게 연결해주고, 어떻게 반영해 주는지, 모두 엔티티메니져의 역활이다. 영속성컨텍스트 내에서 엔티티매니져가 엔티티의 상태를 어떻게 변화
TransactionManager Transaction은 계속 나왔다. @Transactional를 사용할때나, 영혹성 컨택스트에서 Transaction이 끝날때 merge가 된다고 할때도... 그때마다 지나간 이론적인 내용을 살펴보겠다. Transaction ?
JPA에서 Transaction 시작과 끝은 각 메서드의 시작과 끝이다. 하지만 현재있는 트랜젝션과 다른 클래스의 메서드 트랜젝션간의 처리가 어떻게 진행될까? 그 부분의 교통정리를 하는 부분이 propagation이다.REQUIRED : (Default) 만약 기존에
ALL, PERSIST, MERGE, REMOVE, REFRESH, DETECHcould not initialize proxy - no SessionTest를 할때 위 Error가 뜨면 2가지 방법이 있다. 자세한 내용은 다음에 다룰것이다. \- noSession이기
이전에 포스트 했던 JPA Cascade에서 Remove는 없었다. Remove에 대한 설명이 많기 때문이다. 우선 Remove Cascade를 사용해보자.이전에 만들 Test 코드에 Book을 삭제하는 코드를 작성하고 Test하면 Book은 지워지지만 그에 대한 pu
🤔앞서 배웠던 내용만 활용할수있으면 JPA는 쓸수 있다. 하지만 약간의 예외적인 상황에서 Custom해야하는 상황이 생긴다. 그럴때는 @Query를 써보자.Query Method의 이름의 길이 굉장히 길어질때 사용하면 좋다. 엄청 긴 이름의 쿼리를 한번 만들어보고 T
네이티브 쿼리는 JPQL과 다르게 Entity 속성들을 사용하지 못합니다.select \* from book 와 같이 테이블 이름이 들어간다. 다른 컬럼 이름을 적을때도 DB Table에서 쓰는 컬럼 이름을 적어야 한다.현업에서는 네이티브 쿼리를 최소한으로 하는게 좋다
JPA는 ORM이기 때문에 DB Data를 JAVA 객체로 바꿔 주는데 DB Data와 형식이 다르면 어떻게 할까?🤔🤔 바로 @Converter를 사용하는 것이다.쿼리를 통해 가져온 데이터를 객체로 맵핑을 할때 커스터마이징하는 방법을 알아보자.위 코드는 DB의 En
🤔🤔 컨버터를 통해 자바객체에 맵핑하는 법을 배웠다. String이나 Int 같은 Row한 값으로 받아서 서비스 로직에서 변환해도 문제가 없을탠데 왜 이렇게 까지 할까?바로 코드의 가독성 때문이다.오픈소스나 기업체 상용소스같은 최근코드는 이해하기쉽고 읽기쉽게 가독성