본문 바로가기

CS/자바 ORM 표준 JPA 프로그래밍

(5)
[JPA] 프록시와 연관관계 관리 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. ⭐️ 1. 프록시 1) 프록시 em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 DB에 쿼리가 안나가는데 객체가 조회됨 hibernate가 가짜 객체를 줌 특징 실제 클래스를 상속 받아서 만들어짐 (형태가 같음) 프록시 객체는 실제 객체의 참조(target)를 보관 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 2) 프록시 객체의 초기화 Member member = em.getReference(Member.class, “id1”); member.getName(); 프록시 객체는 처음 사용할 ..
[JPA] 연관관계 매핑 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. 단방향 연관관계 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; private int age; //@Column(name = "TEAM_ID") //private Long teamId; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ... → 현재 상황에서 Team에서 member 접근은 불가 2. 양방향 매핑 테이블의 연관관계는 바뀌지 않은 채 양방향 객체 연관관계를 만든다. @Entity ..
[JPA] 엔티티 매핑 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다. 이 어노테이션이 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라 부른다. ## 주의사항 기본 생성자는 필수다 JPA가 엔티티 객체를 생성할 때 기본 생성자를 사용하기 때문 Final 클래스, enum, interface, inner 클래스에는 사용할 수 없다 저장할 필드에 final을 사용하면 안된다 2. @Table 엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용한다. 3. 데이터베이스 스키마 자동 생성 JPA는 데이터베이스 스키마를 자동으로 생성하는 기능을 지..
[JPA] 영속성 관리 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. 엔티티 매니저 팩토리와 엔티티 매니저 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 persistence.xml에 있는 정보를 바탕으로 EntityManagerFactory를 하나만 생성한다. 엔티티 매니저 팩토리는 엔티티 매니저를 만드는 공장인데 공장을 만드는 비용이 상당이 크다. 하지만 공장에서 엔티티 매니저를 생성하는 비용은 거의 들지 않는다. 엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하여 서로 다른 스레드 간에 공유해도 되지만, 엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하여 스레드 간에 절대 공유하면 안된다. 하나의 EntityManagerFactory..
[JPA] JPA 소개 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. SQL을 직접 다룰 때 발생하는 문제점 자바로 개발하는 애플리케이션은 대부분 관계형 데이터베이스를 데이터 저장소를 사용한다. 데이터베이스에 데이터를 관리하려면 SQL을 사용해야 한다. 특히 자바로 작성한 애플리케이션은 JDBC API를 사용해서 SQL를 데이터베이스에 전달해야 하므로 서버 개발자들은 능숙하게 SQL을 다룰 줄 알아야 한다. 1) 반복적인 작업 ① 반복, 반복 그리고 반복 데이터베이스는 기본적으로 객체 구조와는 다른 구조이므로 객체를 데이터베이스에 직접 저장하거나 조회할 수 없다. 그렇기에 개발자가 이를 위해서는 직접 SQL과 JDBC API를 사용해서 객체지향 애플리케이션과 데이터베이스 중간..