JPA
-
회원 도메인 개발JPA/JPA 활용 2023. 7. 11. 18:07
위의 사진과 같이 상품을 주문하는 도메인을 개발할 것이다. 각각의 Entity들을 살펴보면 관계형 데이터베이스의 의존관계를 통해 필요한 관계형 db들끼리 연관이 되어있다. 코드로 작성을 하기 전에 어떤 변수들이 필요한지, FK(foreign key)는 어떤 db의 변수로 지정할 지 등을 먼저 정리하고 코드로 작성하는 것이 좋다. 관계형 데이터 베이스는 3가지 형태가 있다. ManyToOne : 여러개와 하나의 관계를 나타냄 order에서 member와의 관계 OneToMany : 하나와 여러개의 관계를 나타냄 member에서 order의 관계 ManyToMany : 여러개 사이의 관계를 나타냄(사용 되도록 하지 않기) 일대 다 관계에서는 FK를 다수쪽에 넣기(Member와 Order가 있으면 Order에..
-
값 타입 - 2JPA/JPA 기본 2023. 7. 11. 18:06
값 타입의 비교 기본 타입은 내용이 같으면 비교했을 때 true가 나오지만, 객체 타입은 "서울시"라는 값이 같더라도 비교를 하면 false가 나오게 된다. 래퍼런스(참조 값)을 비교하는데, 인스턴스가 다르기 때문에 false가 나오는 것이다. 동일성 비교 : 인스턴스의 참조 값을 비교, == 사용 동등성 비교 : 인스턴스의 값을 비교, equals() 사용 값 타입은 a.equals(b)를 사용해서 동등성 비교를 해야 함 값 타입은 equals() 메서드를 적절하게 재정의 그냥 equlas를 사용해서 a.equals(b)를 하면 false가 나온다. equals는 default 값이 == 비교이기 때문이고, 오버라이딩을 통해 재정의를 한 다음 사용해줘야 한다. 값 타입 컬렉션 값 타입 컬렉션이란 값 타..
-
값 타입JPA/JPA 기본 2023. 7. 11. 18:05
JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 추적 가능 값 타입 int, INteger, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 (변경 되면 이전 값인 100을 알 수 없음) 값 타입의 분류 1. 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 2. 임베디드 타입 -> 여러 개의 값을 묶어서 사용함 3. 컬렉션 값 타임 (coolection value type) 1. 기본값 타입 예) String n..
-
영속성 전이(CASCADE)JPA/JPA 기본 2023. 7. 11. 18:05
영속성 전이 : 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 Parent class @Entity @Getter @Setter public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent") private List childList = new ArrayList(); // 연관관계 메서드 public void addChild(Child child) { childList.add(child); child.setParent(this); } } Child class @Entity @Getter @Setter public class Chil..
-
즉시로딩과 지연로딩JPA/JPA 기본 2023. 7. 11. 18:05
지연로딩(LAZY) @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; } fetch = FetchType.LAZY는 지연로딩으로 설정한다는 뜻이다. 지연로딩을 사용한다면 em.find()를 했을 때 프록시로 가지고 온다. Team team = new Team(); team.setName("teamA"); em.persist(team); Member member1 new Member(); member1.s..
-
프록시JPA/JPA 기본 2023. 7. 11. 18:05
public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory(); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Member member = em.find(Member.class, 1L); // printMember(member); printMemberAndTeam(member); tx.commit(); } catch (Exception e) { tx.rollback(); } finally ..
-
상속관계 매핑JPA/JPA 기본 2023. 7. 11. 18:04
상속관계 매핑이란 객체의 상속과 구조의 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 예를 들어, item의 카테고리가 Book, Movie, Album 3개의 엔티티가 있을 때 상속관계를 매핑하는 것이다. 상속관계 매핑의 종류 1. 조인 전략(JOINED) 2. 단일 테이블 전략(SINGLE_TABLE) 3. 구현 클래스마다 테이블 전략(TABLE_PER_CLASS) 상속관계 매핑의 종류는 @Inheritance(strategy=InheritanceType.XXX) 로 구분된다. 1. 조인 전략(JOINED) Item 엔티티 @Eintity @Getter @Setter @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name..
-
다양한 연관관계 매핑JPA/JPA 기본 2023. 7. 11. 18:04
연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 양방향일 때 연관관계 주인 다중성 다대일[N:1] : @ManyToOne 일대다[1:N] : @OneToMany 일대일[1:1] : @OneToOne 다대다[N:M] : @ManyToMany AvsB의 구조에서 A가 연관관계 주인이다. 예를 들면 다대일에서는 다가 연관관계 주인이고, 일대다에서는 일이 연관관계 주인이다. 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념은 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 (양방향은 서로 단방향으로 연결된 것임) 연관관계 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A->B, B->A처럼 참..