JPA/JPA 기본
-
값 타입 - 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처럼 참..
-
연관관계 매핑 - 단방향, 양방향 연관관계JPA/JPA 기본 2023. 7. 11. 18:03
연관관계가 필요한 이유 : 하나의 객체가 단독으로 존재하는 경우는 드물기 때문에 객체(또는 엔티티) 끼리의 연관관계를 통해 데이터를 주고받아야 한다. 단방향 매핑 Member와 Team을 보면 연관관계 매핑이 되어있는데, 양방향이 아니라 단방향으로 멤버가 Team을 가리키고 있다. 그리고 이 경우에는 일대 다 연관관계 상황이며 Team 하나에 Member가 여러명 들어갈 수 있다. Member 엔티티 @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; } Team하나에 Member가..