Back-End/JPA

· Back-End/JPA
ManyToOne 다대일 관계의 반대 방향은 항상 일대다 관계이며 일대다 관계의 반대 방향도 다대일 관계다. 데이터베이스에서 일대다 관계에서 외래 키는 항상 다쪽이 가지고 있기 때문에 객체의 양방향 관계에서의 주인도 항상 다쪽이다. 양방향 연관관계는 항상 서로를 참조해야 한다. setTeam, addMember 같은 편의 메서드를 작성하는 것이 좋지만 양쪽에 모두 작성하는 경우에는 무한루프에 빠질 수 있으니 검사해줘야 한다. OneToMany 일대다 관계는 엔티티를 하나 이상 참조할 수 있어서 컬렉션 타입을 사용한다. 일대다 단방향 관계를 매핑할 때 @JoinColumn 어노테이션을 명시하지 않으면 연결 테이블을 중간에 두고 연관관계를 관리하는 조인 테이블 전략을 사용하여 반드시 명시해주는게 좋다. 일대..
· Back-End/JPA
단방향 연관관계 만약 위와 같은 연관관계의 테이블이 있다고 했을 때 멤버는 하나의 팀에만 소속될 수 있지만 팀은 여러 명의 회원을 가질 수 있는 다대일(멤버:팀) 관계이다. 테이블과의 연관관계는 한 쪽에서만 외래키를 참조하면 어느 쪽에서든 조인할 수 있는 양방향 관계이다. @Entity @Table @Getter @Setter public class Member { @Id @Column(name = "member_id") private int id; @Column(name = "member_name") private String memberName; @ManyToOne @JoinColumn(name = "team_id") private Team team; } @Entity @Table @Getter @S..
· Back-End/JPA
JPA는 클래스의 매핑정보와 데이터베이스 방언을 사용해 스키마를 자동으로 생성하는 기능을 지원한다. 해당 속성을 추가하면 애플리케이션 실행 시 데이터베이스에 테이블을 자동으로 생성해준다. 실제 서버 운영에서 사용할 만한 기능은 아니기 때문에 개발 환경이나 학습용으로만 참고하는 것이 좋다. 해당 속성을 추가하여 sql이 어떻게 작성되는지 볼 수 있다. 속성 create 기존 테이블 삭제 후 새로 생성 create-drop create + 애플리케이션 종료 시 테이블 삭제 update 데이터베이스와 매핑정보를 비교해 변경 사항만 수정 validate 데이터베이스와 매핑정보를 비교해 차이가 있으면 경고 후 실행하지 않음 none 자동 생성 기능을 사용하지 않고 싶을 때 사용
· Back-End/JPA
@Entity @Entity public class Member { } 테이블과 매핑할 클래스는 해당 어노테이션을 필수로 붙여야 한다. 속성 name 기본값은 클래스명을 사용하며, 직접 지정도 가능하다. 주의사항 기본 생성자는 필수다. final 클래스, enum/interface/inner 클래스에는 사용할 수 없다. 필드에도 final을 사용하면 안 된다. @Table @Entity @Table(name = "Member", uniqueConstraints = {@UniqueConstraint (name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"})}) public class Member { } 엔티티와 매핑할 테이블을 지정하는 어노테이션이다. 생략 시 ..
· Back-End/JPA
영속성 컨텍스트 엔티티 매니저로 엔티티를 저장하거나 조회 시 엔티티를 영구적으로 보관하고 관리하는 저장소 같은 개념 엔티티 매니저를 생성할 때 한 개의 영속성 컨텍스트가 만들어지고 엔티티 매니저는 이런 영속성 컨텍스트에 접근하고 관리하는 도구라고 볼 수 있음 em.persist(member); persist 메서드는 정확하게는 엔티티를 저장하는 메서드가 아닌 영속성 컨텍스트에 저장하는 메서드인 것 엔티티의 생명주기 비영속 영속성 컨텍스트와 아무런 관계가 아닌 상태 엔티티 객체를 생성만 한 상태 영속 영속성 컨텍스트에 저장된 상태 엔티티 매니저를 통해 영속성 컨텍스트에 저장된 상태로 즉, persist 메서드를 사용한 상태 영속성 컨텍스트에 의해 관리가 되고 있는 상태 준영속 영속 상태였다가 분리된 상태 ..
· Back-End/JPA
1. 엔티티 매니저 팩토리 생성하기 JPA를 시작하기 위해선 엔티티 매니저 팩토리를 생성해야 하므로 설정 정보(persistence.xml)를 통해 엔티티 매니저 팩토리를 생성 EntityManagerFactory emf = Persistence.createEntityManagerFactory("영속성 유닛명"); EntityManagerFactory는 인터페이스이기 때문에 이를 구현한 Persistence 클래스의 createEntityManagerFactory 메서드를 사용해 엔티티 매니저 팩토리 생성 하이버네이트 같은 JPA 구현체들은 팩토리 생성 시 커넥션풀도 생성 엔티티 매니저 팩토리는 생성 비용이 크기 때문에 한 번만 생성하고 공유해서 사용해야 함 2. 엔티티 매니저 생성하기 엔티티 매니저 팩..
· Back-End/JPA
객체 매핑 MEMBER 테이블이 존재하고 ID(기본키), NAME, AGE 컬럼이 존재한다는 가정하에 매핑을 해보자 @Entity @Table(name="MEMBER") public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private String id; @Column(name = "NAME") private String username; private Integer age; @Column(nullable = false, name = "LAST_MODIFIED_AT") private LocalDateTime modifiedAt = LocalDateTime.now(); @Transient private String em..
· Back-End/JPA
JPA 자바 진영의 ORM 기술 표준 프레임워크 애플리케이션과 JDBC 사이에서 동작 애플리케이션을 SQL 중심이 아닌 객체 중심으로 개발할 수 있게 도와줌 대표적인 JPA의 구현체는 하이버네이트가 있음 ORM Object - Relational Mapping 객체와 관계형 데이터베이스 간의 차이를 중간에서 해결해주는 프레임워크 객체와 관계형 데이터베이스를 매핑한다는 뜻 직접적인 SQL 사용의 단점 데이터베이스는 데이터 중심의 구조를 가지기 때문에 객체 구조와는 다름 구조가 다르기 때문에 객체를 데이터베이스에 직접적으로 저장 및 조회 불가능 개발자가 직접 변환 작업을 해줘야 함 위와 같은 작업을 위해서 반복적으로 작성해야 할 코드가 너무 많음 SQL 중심의 개발로 인해 코드의 수정이 필요한 경우 변경해야..
da9dac
'Back-End/JPA' 카테고리의 글 목록