Dev/JPA 23

JPA M:N 연관관계

😈 참고로 ManyToMany는 잘 안쓰고 중간에 맵핑 엔티티(테이블)을 만들어서 사용한다. BookAndAuthor라고 만들꺼지만 네이밍은 원래 이렇게 하면 안된다. Author Entity @Entity @NoArgsConstructor @Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class Author extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String country; // @ManyToMany @OneToMany @JoinCo..

Dev/JPA 2022.03.02

JPA 연관관계 살펴보기(1:1)

Bookmanager 관계도 😎1대1 연관관계 살펴보기. 먼저 테이블 하나 추가 하자. 위 테이블 대로 Entity 만들자. @Entity @NoArgsConstructor @Data @ToString(callSuper = true) //상속받은 클래스에 대해 처리해줘야한다. ToString을 재정의 한다. @EqualsAndHashCode(callSuper = true) //EqualsAndHashCode를 재정의해준다. //@EntityListeners(value = AuditingEntityListener.class) public class Book extends BaseEntity { @Id @GeneratedValue private Long id; private String name; priva..

Dev/JPA 2022.03.02

JPA 연관관계 (N:1)

😎N:1 연관관계 알아보자~~ OneToMany 에서는 참조되는 값을 One에서 가지고 있지 않다. 만약 가져야 한다면UserHistoryId가 1,2,3,4,5 즉 어떤 값의 배열이 된다. 그래서 One에 해당하는 PK ID를 Many쪽에서 FK이다. 일반적인 상황에서는 @ManyToOne이 더 자주 사용된다. 해당 Entity가 필요한 FK 값을 Entity가 함께 가지고 있기 때문이다. 실습으로 알아보자. 지난시간에 User와 UserHistory를 수정하여 보자. @ManyToOne UserHistory @Entity @NoArgsConstructor @Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) //@EntityLi..

Dev/JPA 2022.03.02

JPA 연관관계 (1:N)

😎1:N 연관관계를 알아보자. 위의 user Table과 user_history는 1대 N 관계를 가진다. ✅ 이전에 만든 User와 User_history 엔티티들을 그대로 사용하면된다. Test 해보자. @Test void userRelationTest(){ User user = new User(); user.setName("david"); user.setEmail("david@fast.com"); user.setGender(Gender.MALE); userRepository.save(user); userHistoryRepository.findAll().forEach(System.out::println); }결과 UserHistory(super=BaseEntity(createdAt=2022-02-08..

Dev/JPA 2022.03.02

JPA EntityListener

🤔EntityListener?? 엔티티 리스너란? 이벤트를 관찰하고 있다가, 이벤트가 발생하면 특정 동작을 진행하는 것. Entity리스너 이기 때문에 엔티티가 동작하는 몇가지 방법에 이벤트를 리스닝 하고 있다. ✅ Entity에 Listener설정 @PrePersist // Insert호출 전 실행 @PreUpdate // marge 호출 전 실행 @PreRemove // Delete호출 전 실행 @PostPersist // Insert호출 후 실행 @PostUpdate // marge 호출 후 실행 @PostRemove // Delete호출 후 실행 @PostLoad // select호출 후 실행UserEntity ... ... @PrePersist public void prePersist(){ Sy..

Dev/JPA 2022.03.02

JPA Entity의 기본속성

🤔Entity 도매인 객체인 Entity는 실습을 통해 공부해보자. ✅ GenerationType 이 뭘까? @Entity // 해당 객체가 JPA에서 관리하고 있는 객체인것을 정의. public class User { @Id // 엔티티에는 식별자가 필요한데 @ID로 표현. @GeneratedValue // GenerationType (IDENTITY, SEQUENCE, TABLE, AUTO) private long id; /*IDENTITY * DB에서 AUTOINCREMENT를 이용해 자동으로 ID값이 늘어나는 것 처럼 id값을 먼저 insert 시킨다. * 그래서 트랜젝션이 끝나기 전에 , 즉 롤백 된다하더라도 이미 insert 되어 있어서 마치 이빨빠진것 처럼 중간에 비는 현상이 일어난다. /*..

Dev/JPA 2022.03.02

JPA 쿼리메소드 정렬

QueryMethod를 통한 Sort Paging 🤔 왼쪽에서 첫번째, 오른쪽에서 첫번째, 앞에서 첫번째, 뒤에서 첫번째,,,, 여러게 중에 하나는 순서에 따라 다른다. 👉 지난번에 했던 findLastByName 같은건 order by를 하고 첫번째를 선택해야한다고 했다. 그렇듯 Sort는 중요하다. ✅ SORT 실습 // findLastByName을 만들기 (역순으로 정렬후 가장 위에 값) (Asc는 정순, Desc는 역순) List findTopByNameOrderByIdDesc(String name); // findLastByName (Id역순으로 이메일 정순으호하여 첫번째 데이터) List findFirstByNameOrderByIdDescEmailAsc(String name); // 파라미터 ..

Dev/JPA 2022.03.02

JPA 쿼리메소드(QueryMethod)

🤔 실제로 서비스에서는 WHERE 조건이 복잡할탠데...어떻하지? QueryMethod 활용 JPA 사용할 때 QueryMethod가 많은 해택을 받는다. 레파지토리에 네이밍베이스로 선언만 하면 Query를 불러올수있다. 하지만 먼저 QueryMethod가 어떻게 만들어 지고 작동하는지 알아야한다. TYPE ✅ 먼저 UserRepository에 메서드를 만들고 public interface UserRepository extends JpaRepository { User findByName(String name); //이름을 통해 유저 가져오는 메서드. }✅ Test 해보자 @Test void select() { System.out.println(userRepository.findByName("martin"..

Dev/JPA 2022.03.02

JPA Repository Interface 상세 2

먼저 Data.sql 사용해보자. Data.sql 파일을 리소스 하위에 두면 jPA가 로딩할때 해당 쿼리를 한번 실행해 준다.!!!! Test할때 개 꿀~ call next value for hibernate_sequence; insert into user (`id`,`name`,`email`,`created_at`,`updated_at`) values (1, 'martin','martin@fast.com',now(),now()); call next value for hibernate_sequence; insert into user (`id`,`name`,`email`,`created_at`,`updated_at`) values (2, 'demis','d..

Dev/JPA 2022.03.02

JPA Repository Interface 상세 1

JPA Repository Interface Entity 자바객체와 DB 테이블과 연결해주는 것이 ORM 이라고 했는데, 여기서 자바객체를 Entity라고 한다. 그래서 어노테이션 엔티티를 사용하여 쉽게 엔티티를 나타낼수 있다. 🤔 왜 오류가 뜰까? 기본적으로 엔티티에는 기본키가 있어야 하기때문이다. @Id @GeneratedValue //autoincrement private long id;를 추가해 주자. ✅ 이렇게 User Entity가 만들어졌다. 그럼 해당객체를 어떻게 저장하고 어떻게 조회할까? 바로 리파지토리를 이용한다. Repository ✅ 이전에 설명했던 Spring Data JPA 지원해주는것이 여기다. 자바 인터페이스를 선언해주고 JpaRepository를 상속받는거 만으로 많은 JP..

Dev/JPA 2022.03.02