Category: JPA

0

JPA 연관 관계 - @MappedSuperclass

목차 JPA 연관 관계 - 고아 객체 JPA 연관 관계 - 즉시로딩과 지연로딩 JPA 연관 관계 - 프록시 객체 JPA 연관 관계 - @MappedSuperclass JPA 연관 관계 - 상속 관계 Mapping JPA 연관 관계 - 영속성 전이 Cascade JPA 연관 관계 - 양방향 연관관계와 연관과계의 주인 JPA 연관 관계 - 양방향 연관관계 JPA 연관 관계 - 객체 지향 스럽게 모델링 하기 JPA 연관 관계 - 객체 관계 모델링하기 JPA 연관 관계 공통 Mapping 정보를 관리하기 위한 MappedSuperclass Entity 에 공통적으로 들어가는 Mapping 정보를 관리해 코드가 중복해서 작성하는 것을 방지하기 위해 사용하는 어노테이션 상속관계 Mapping 이 아니다. 부모 클래스를 상속 받는 자식 클래스에 Mapping 정보만 을 제공한다. 직접 생성해서 사용할 일이 없으므로 추상클래스(abstract) 를 사용하는 것이 좋다. MappedSuperclass 클래스를 상속 받기 위해서는 같은 @MappedSuperclass 를 사용한 클래스나 @Entity 을 이용한 클래스만 상속이 가능하다. 요구 사항 모든 Entity 에는 생성자, 생성일, 수정자, 수정일 정보가 들어가야 한다. 모든 Entity 에 공통적으로 들어가는 Mapping 정보 를 관리하기 위한 BaseEntity 클래스를 생성한다. @MappedSuperclasspublic abstract class BaseEntity { private String createdBy; private LocalDateTime createdDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate;}

0

JPA 연관 관계 - 양방향 연관관계와 연관과계의 주인

목차 JPA 연관 관계 - 고아 객체 JPA 연관 관계 - 즉시로딩과 지연로딩 JPA 연관 관계 - 프록시 객체 JPA 연관 관계 - @MappedSuperclass JPA 연관 관계 - 상속 관계 Mapping JPA 연관 관계 - 영속성 전이 Cascade JPA 연관 관계 - 양방향 연관관계와 연관과계의 주인 JPA 연관 관계 - 양방향 연관관계 JPA 연관 관계 - 객체 지향 스럽게 모델링 하기 JPA 연관 관계 - 객체 관계 모델링하기 JPA 연관 관계 양방향 연관관계의 문제점 객체에서는 각기 다른 객체에서 참조하는 객체를 업데이트 하는 방법이 두 가지가 발생한다. 양방향 연관관계의 해결 방법 객체의 두 관계중 하나를 연관관계의 주인 으로 지정해 주인만이 외래 키를 관리하게 한다.(등록, 수정)주인이 아닌 쪽은 읽기만 가능하다 양방향 연관관계 주인 정하기 Foreign Key (외래키) 가 있는 곳을 주인으로 정해라 연관관계의 주인은 mappedBy 속성을 사용할 수 없다. 연관관계 주인이 아니면 mappedBy 속성을 사용할 수 있다.

0

JPA 연관 관계 - 양방향 연관관계

목차 JPA 연관 관계 - 고아 객체 JPA 연관 관계 - 즉시로딩과 지연로딩 JPA 연관 관계 - 프록시 객체 JPA 연관 관계 - @MappedSuperclass JPA 연관 관계 - 상속 관계 Mapping JPA 연관 관계 - 영속성 전이 Cascade JPA 연관 관계 - 양방향 연관관계와 연관과계의 주인 JPA 연관 관계 - 양방향 연관관계 JPA 연관 관계 - 객체 지향 스럽게 모델링 하기 JPA 연관 관계 - 객체 관계 모델링하기 JPA 연관 관계 객체와 테이블이 관계를 맺는 차이 객체의 양방향 관계는 사실 양방향 관계가 아니라 서로다른 단방향 관계 2개 다.테이블은 외래키 하나 로 두 테이블의 연관관계를 관리한다. 객체 : 연관관계 2개 (단방향 2개) 회원 —> 팀 연관관계 1개 (단방향) 팀 —> 회원 연관관계 1개 (단방향) 테이블 : 연관관계 1개 (양방향 1개) 회원 <—> 팀의 연관관계 1개 (양방향) 양방향 연관관계로 설계하기1:N 연관관계 Mapping OneToMany 어노테이션을 이용해 1:N 연관관계를 Mapping 한다. mappedBy 속성을 이용해 연관된 Entity 클래스 내 field 이름을 넣어준다. @Entitypublic class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "TEAM_ID") private Long id; private String name; @OneToMany(mappedBy = "team") private List<Member> members = new ArrayList<>();}

0

JPA 연관 관계 - 객체 관계 모델링하기

목차 JPA 연관 관계 - 고아 객체 JPA 연관 관계 - 즉시로딩과 지연로딩 JPA 연관 관계 - 프록시 객체 JPA 연관 관계 - @MappedSuperclass JPA 연관 관계 - 상속 관계 Mapping JPA 연관 관계 - 영속성 전이 Cascade JPA 연관 관계 - 양방향 연관관계와 연관과계의 주인 JPA 연관 관계 - 양방향 연관관계 JPA 연관 관계 - 객체 지향 스럽게 모델링 하기 JPA 연관 관계 - 객체 관계 모델링하기 JPA 연관 관계 외래키를 객체 내 Field 값 으로 모델링 @Entitypublic class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "TEAM_ID") private Long id; @Column private String name;} @Entitypublic class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MEMBER_ID") private long id; @Column(name = "USERNAME") private String username; @Column(name = "TEAM_ID") private Long teamId; // 외래키를 Field 값으로 갖는다.} Member 가 소속된 Team 정보 가져오기 Member 가 소속된 Team 정보를 가져오기 위해서는 Member Id를 이용해 해당 Member 객체를 가져와 저장된 Team Id를 가져온 후 해당 Team Id를 이용해 Member가 소속된 Team 을 조회해야 한다. Team team = new Team();team.setName("TeamA");entityManager.persist(team);Member member = new Member();member.setUsername("member1");member.setTeamId(team.getId());entityManager.persist(member);Member findMember = entityManager.find(Member.class, member.getId());Long findTeamId = findMember.getTeamId();Team findTeam = entityManager.find(Team.class, findTeamId); 객체 지향 스럽지 못한 모델링

0

JPA 연관 관계 - 객체 지향 스럽게 모델링 하기

목차 JPA 연관 관계 - 고아 객체 JPA 연관 관계 - 즉시로딩과 지연로딩 JPA 연관 관계 - 프록시 객체 JPA 연관 관계 - @MappedSuperclass JPA 연관 관계 - 상속 관계 Mapping JPA 연관 관계 - 영속성 전이 Cascade JPA 연관 관계 - 양방향 연관관계와 연관과계의 주인 JPA 연관 관계 - 양방향 연관관계 JPA 연관 관계 - 객체 지향 스럽게 모델링 하기 JPA 연관 관계 - 객체 관계 모델링하기 JPA 연관 관계 객체 지향 스럽게 모델링 하기 객체는 참조를 이용해 다른 객체를 가져올 수 있다. 한 객체내에 관련된 객체 정보를 가질 수 있도록 모델링한다. Member 에서 Team 정보를 가져올 때 Member 객체 내 참조 를 통해 정보를 가져올 수 있다. N:1 연관 관계를 명시할 때는 @ManyToOne 과 @JoinColumn 을 이용해 관계를 나타낸다. @Entitypublic class Member { @Id private long id; private String username; @ManyToOne @JoinColumn private Team team; // Member 객체 내에서 관련된 Team 객체를 관리할 수 있도록 변경} Member 가 소속된 Team 정보 가져오기

0

JPA 연관 관계

목차 JPA 연관 관계 - 고아 객체 JPA 연관 관계 - 즉시로딩과 지연로딩 JPA 연관 관계 - 프록시 객체 JPA 연관 관계 - @MappedSuperclass JPA 연관 관계 - 상속 관계 Mapping JPA 연관 관계 - 영속성 전이 Cascade JPA 연관 관계 - 양방향 연관관계와 연관과계의 주인 JPA 연관 관계 - 양방향 연관관계 JPA 연관 관계 - 객체 지향 스럽게 모델링 하기 JPA 연관 관계 - 객체 관계 모델링하기 JPA 연관 관계 JPA 연관 관계 테이블과 객체 간 패러타임 차이로 인해 생기는 문제가 있다. 그 중 대표적인게 테이블 연관관계 를 객체로 풀어내는 것테이블간의 연관관계를 객체 연관관계로 풀어내기 위해서는 아래 3가지 조건을 잘 이해해야 한다. 방향 테이블 연관관계는 양방향 객체의 연관관계는 단방향으로만 존재한다. 객체의 양방향 관계는 단방향 관계 2개를 이용해 만들어준다. 다중성 One To One(일대일) 1:1 One To Many(일대다) 1:N Many To One(다대일) N:1 Many To Many(다대다) N:M 연관관계의 주인 테이블 연관관계를 객체 양방향 연관관계로 만들기 위해서는 연관관계 주인 을 정해야 한다. 객체의 두 관계중 하나를 연관관계의 주인으로 지정해 주인만이 외래 키 를 관리하게 한다. 연관관계 주인은 외래키를 이용해 (등록, 수정) 등이 가능하지만 주인이 아닌 쪽은 읽기 만 가능하다 JoinColumn 어노테이션 외래키 를 매핑할 때 사용하는 어노테이션 속성 기능 기본 값 name 매필할 외래키 이름을 명시한다. 필드명 + _ + 참조하는 테이블 기본키 컬럼명 referencedColumnName 외래 키가 참조하는 대상 테이블 컬럼명 참조하는 테이블의 기본키 컬럼명 foreignKey 외래키 제약 조건을 직접 지정할 수 있다. unique, nullable, insertable, updatable, columnDefinition, table @Column 속성과 같다.

0

JPA - Persist Context (영속성 컨텍스트)

목차 JPA - Entity의 생명주기 JPA - Persist Context (영속성 컨텍스트) Persist Context (영속성 컨텍스트) 란? JPA 가 Entity 를 관리하기 위한 공간, Entity 상태가 Database 에 반영되기 전까지 Entity 의 읽기/쓰기/수정/삭제를 상태 관리한다. EntityManagerFactory 에서 EntityManager 를 생성하고 EntityManager 를 이용해 영속성 컨텍스트에 접근할 수 있다. EntityManager 를 이용해 Entity(데이터)를 저장하거나 조회하면 영속성 컨텍스트에서 해당 Entity 를 관리하게 된다. EntityManager 는 Transaction 단위로 영속성 컨텍스트를 생성하고 지운다. EntityManager 와 영속성 Context가 1:1로 대응이 된다. 영속성 Context는 내부에 1차 cache가 존재하고 (key, value) 형태로 데이터를 관리한다.장점 : buffering이나 Caching을 할 수 있다. @Id Entity Member1 member @Id : Key Entity : 객체 영속성 컨텍스트의 이점

0

JPA 프로그래밍(기본편) 2 - JPA 설정하기

JPA 프로그래밍(기본편) 2 - JPA 설정하기Entity 생성하기Entity 어노테이션을 통해 JPA가 관리하는 객체임을 명시해준다. @Entitypublic class Member { @Id private long id; private String name; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }} EntityManagerFactory 생성하기 JPA를 사용하기 위해 persistence.xml에 JPA 설정 정보를 넣어 줬다. 해당 정보를 사용하기 위해서 EntityManagerFactory를 생성해주도록 한다. EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("hello"); EntityManager 생성하기EntityManagerFactory를 이용해 EntityManager를 생성해준다.

0

JPA 프로그래밍(기본편) 1 - JPA 설정하기

JPA 프로그래밍(기본편) 1 - JPA 설정하기의존성 추가하기JPA를 사용하기 위해서 JPA를 구현한 hibernate 라이브러리를 사용한다. DB로는 메모리 DB인 H2 DataBase를 사용하도록 한다. <!-- JPA 하이버네이트 --><dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.3.10.Final</version></dependency><!-- H2 데이터베이스 --><dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.200</version></dependency> JPA Setting 하기resource/META-INF/persistence.xml JPA 표준 문법 설정 javax.persistence.jdbc.driver : 사용하고자 하는 DB 드라이버를 설정한다. javax.persistence.jdbc.user : DB에 접근하기 위한 Username javax.persistence.jdbc.password : DB에 접근하기 위한 Password javax.persistence.jdbc.url : 접근하고자 하는 DataBase 경로 hibernate 전용 문법 설정

0

JPA - Entity의 생명주기

목차 JPA - Entity의 생명주기 JPA - Persist Context (영속성 컨텍스트) 엔티티 생명주기비영속 (new/transient) Entity 객체가 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 Entity 객체가 생성돼 아직 영속성 컨텍스트에 저장되기 전 상태다. // 비영속 상태Member member = new Member();member.setId(101L);member.setName("HelloJPA"); 영속 (managed) Entity 객체가 현재 영속성 컨텍스트에 관리되는 상태

0

JPA 란?

JPA 란?객체를 이용해 DataBase 테이블을 다루기 위해 만들어진 ORM(Object Relation Mapping) 기술