본문 바로가기

Java107

JAVA ORM - JPA(연관관계 매핑2) 연관관계를 맺기전 고려해야할 사항 으로는 방향성, 연관관계의 주인 설정, 데이터베이스 설계와 일치하는지 등여러가지 있다. 방향성단방향 : 하나의 엔티티만 다른 엔티티를 참조하는 경우. 순환 참조 문제 피할 수 있음.양방향 : 두 엔티티가 서로를 참조하는 경우. 주인과 비주인을 명확히 구분해야함.직전 포스팅에서 말했듯이 DB에서 테이블은 외래키 하나로 양쪽으로 조인가능함.(방향성이 딱히 존재하지 않음.)하지만 객체는 참조용 필드가 있어야만 있는쪽으로 참조가 가능해서 방향성이 존재함.양방향으로 객체를 설계하기 위해선 양쪽에 서로의 레퍼런스가 존재해야함.  주인 설정주인 : 외래키를 관리하는 엔티티, 외래 키 컬럼을 실제로 변경할 수 있음. @JoinColumn사용비주인: mapped by 속성 사용양방향 .. 2024. 8. 3.
JAVA ORM - JPA(연관관계 매핑) 연관관계?항상 ERD를 보면 테이블간 관계가 복잡하게 얽혀있다. 그래서 이 연관관계 매핑을 능숙하게 할 줄 알아야 한다.모든 연관관계에는 주인테이블이 있고 비주인테이블이 있게된다. 주인테이블은 외래키를 실제로 관리하는 엔티티가 맡게 된다.연관관계의 종류를 알아보자. 1:1관계예를 들어 Member 테이블과 MemberDetail 테이블이 있다고하면, 한명의 회원은 한개의 회원 상세 정보를 가진다.@Entitypublic class Member { @Id @GeneratedValue private Long id; private String name; @OneToOne @JoinColumn(name = "member_detail_id") private MemberDetail .. 2024. 8. 1.
JAVA ORM - JPA(엔티티 매핑) 애너테이션객체 - 테이블 매핑 : @Entity, @Table필드 - 컬럼 매핑 :  @Column기본 키 매핑 : @Id연관관계 패핑 : @ManyToOne, @OneToMany, @JoinColumn위의 애너테이션을 붙혀줘야 JPA가 관리할 수 있다.객체-테이블 매핑@Entity를 붙히면 클래스를 테이블로 매핑을 해준다.기본 생성자는 필수. final클래스, enum, interface, inner클래스는 X저장할 필드에는 final사용 X아래는 예시 Entity@Entity@Table(name = "app_user")@Getter@Setterpublic class User { @Id @Column(name = "ID", nullable = false) @GeneratedValue(s.. 2024. 7. 31.
JAVA ORM - JPA(영속성 컨텍스트) 영속성 컨텍스트(Persistence Context)란엔티티를 관리하는 저장소라고보면 된다. 엔티티 매니저가 엔티티를 영속성 컨텍스트에 보관하고, 이 컨텍스트 내에서 엔티티의 상태를 관리한다.1. 엔티티 객체의 생명 주기를 관리하고2. 1차 캐시로서 DB에서 조회한 엔티티를 메모리에 캐시해서 반복 조회 시 비용절감의 효과가 있고3. 영속 엔티티의 동일성을 보장하고4. 엔티티의 변경 사항 감지하고 트랜잭션이 끝날 때 DB에 반영함. 1. 엔티티의 생명주기비영속(Transient) : 새로운 엔티티 객체를 생성하면 비영속 상태영속(Persistent) : 영속성 컨텍스트에 의해 관리되는 상태 (entityManager.persist() 메서드 호출)준영속(Detached) : 한 번 영속상태였다가 영속성 컨.. 2024. 7. 31.