본문 바로가기

프로그래밍/JPA

(4)
양방향 연관관계 양방향 연관관계 엔티티의 관계가 서로를 참조하게 되면 양방향 연관관계라고 한다. 객체에서는 Member는 Team을 가지고 있고 Team은 일대다 관계여서 여러 Member와 관계를 맺을 수 있으므로 List 컬렉션을 사용한다. 테이블에서는 외래키 하나로 Join을 통해 Member와 Team을 조회 가능하기 때문에 단방향 연관관계와 동일하다. 객체 관계 매핑 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ... } @Entity public..
단방향 연관관계 단방향 연관관계 엔티티의 관계가 한쪽만 참조하는 것을 단방향 관계라고 한다. 객체의 연관관계와 테이블에서의 연관관계의 차이 객체는 참조를 통해 연관관계를 맺어 언제나 단방향이다. 따라서 객체 간 연관관계를 양방향으로 만들려면 반대쪽도 필드를 추가해야 한다. 하지만 테이블에서는 외래키를 통해 연관관계를 맺으며 A join B가 되면 B join A도 가능하다. 객체 관계 매핑 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ... } @Entit..
영속성 컨텍스트란? 영속성 컨텍스트란? 영속성 컨텍스트는 논리적인 개념으로 해석하면 '엔티티를 영구 저장하는 환경'이란 뜻으로 모든 엔티티를 DB에서 가져오거나 DB에 저장하는 캐시라고 생각하면 이해하기 쉽다. 엔티티의 생명주기 엔티티는 4가지 상태가 존재한다. 비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 상태로 순수한 객체상태Account account = new Account(); account.setId(1L); account.setEmail("hong@mail.com"); account.setNickname("홍길동"); 영속(managed) 영속성 컨텍스트에 저장된 상태로 영속성 컨텍스트에 의해 관리됨 영속상태는 DB에 저장된 상태가 아니다(트랜잭션의 commit이 발생한 시..
JPA란? JPA란? Java Persistence API의 약자로 JAVA의 ORM 표준으로 인터페이스이다. 인터페이스이기 때문에 여러 구현체들이 있다(Hibernate, EclipseLink 등등) ORM이란? ORM(Object Relational Mapping)은 약자 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻이다. SQL 쿼리가아닌 메서드를 통해 SQL을 생성하여 데이터를 조작할 수 있다. 대중적인 언어에는 대부분 ORM이 있다. (Python, TypeScript 등등) JPA 동작 JPA는 애플리케이션과 JDBC 사이에서 동작하며 JPA를 사용하면 JPA가 쿼리를 생성하고 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다. 저장 MemberDAO에서 객체를 저장하고 싶을 때 JPA를 ..