본문 바로가기

반응형

Programming/JPA

(10)
[JPA] 양방향 연관관계와 연관관계의 주인 양방향 매핑은 DB에서 JOIN 구문을 통해 양방향으로 필요한 값을 가져오는 것처럼 객체 또한 양방향으로 통신할 수 있는 구조를 만드는 것입니다. DB의 테이블은 방향 이라는 개념이 없이 필요에 의해 JOIN 구문을 사용해서 원하는 값을 가져오면 됩니다. 하지만 문제는 객체를 다룰 때 발생합니다. 아래 이미지를 보면 단방향 구조에서 Member에서 Team을 참조할 수 있지만, Team에서 Member를 참조할 수 없습니다. 단방향 양방향 위 내용을 참고해서 엔티티 클래스를 작성합니다. Team에서 Member는 1:N 관계이기 때문에 @OneToMany 입니다. mappedBy 속성은 해당 필드가 어떤 필드와 연결되어 있는지 명시하는 속성입니다. 이 필드는 Member 객체의 team 필드와 매핑되어 ..
[JPA] H2 Database 새로운 데이터베이스 생성 오류 관련 Mac 기준으로 작성되었습니다. H2 데이터베이스 사용 시 기본적으로 test 데이터베이스에 테이블을 생성해서 연습합니다. 만약 새로운 데이터베이스를 생성하고 싶은 경우 상단의 H2 아이콘을 우측 클릭하여 새로운 데이터베이스를 생성합니다. 새로운 데이터베이스를 생성 시 출력되는 URL을 가져다가 H2 연결 시 사용하면 됩니다. 그리고 만약 테이블을 생성했지만 H2에서는 생성된 테이블을 확인할 수 없는 경우가 있는데요, 그때는 Maven Repository에서 H2 버전을 1.3.xx 버전으로 다운그레이드 합니다. 저는 이 방법으로 문제를 해결했습니다.
[JPA] 기본 키 매핑 기본 키 매핑 어노테이션 @Id @GeneratedValue 기본 키 매핑 방법 직접 할당: @Id만 사용. 자동 생성: @GeneratedValue 사용. 직접 할당이 아닌 값을 생성해서 사용하고 싶다면 @GeneratedValue 어노테이션의 strategy 속성을 추가하면 됩니다. 생성 전략은 네 가지가 있습니다. 자동 생성 전략 - IDENTITY 기본 키 생성을 데이터베이스에 위임합니다. 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용합니다. ex) MySQL의 AUTO_INCREMENT JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행합니다. AUTO_INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID값을 알 수 있습니다. IDEN..
[JPA] 필드와 컬럼 매핑 아래 요구사항이 추가되었다고 가정합니다. 회원은 일반 회원과 관리자로 구분한다. 회원 가입일과 수정일이 있어야 한다. 회원을 설명할 수 있는 필드가 필요하다. 이 필드는 길이 제한이 없다. 요구사항에 따라 엔티티 클래스를 구성합니다. import javax.persistence.*; import java.util.Date; @Entity public class Member { @Id private Long id; // DB 컬럼명 설정 @Column(name = "name") private String name; private int age; @Enumerated(EnumType.STRING) private RoleType roleType; @Temporal(TemporalType.TIMESTAMP) p..
[JPA] 엔티티 매핑 엔티티 매핑 소개 객체와 테이블 매핑: @Entity, @Table 필드와 컬럼 매핑: @Column 기본 키 매핑: @Id 연관관계 매핑: @ManyToOne, @JoinColumn 객체와 테이블 매핑 - @Entity @Entity가 붙은 클래스는 JPA가 관리하는 엔티티 입니다. JPA를 사용해서 테이블과 매핑되는 클래스에 @Entity 어노테이션이 필수로 사용되어야 합니다. 기본 생성자는 필수입니다.(파라미터가 없는 public또는 protected 생성자) final 클래스, enum, interface, inner 클래스에 사용할 수 없습니다. 저장할 필드에 final 사용하면 안됩니다. @Entity 에는 name 속성이 있습니다. JPA에서 사용할 엔티티 이름을 지정하는데 사용됩니다. 속성..
[JPA] 영속성 컨텍스트 JPA에서 중요한 두 가지 개념은 객체와 관계형 데이터 매핑(Object Relational Mapping) DB와 엔티티를 어떻게 매핑할 것인가에 대한 설계 영속성 컨텍스트(Persistence Context) JPA 내부 동작을 제어 Entity Manager Factory 그리고 Entity Manager 사용자의 요청이 있을 때마다 Entity Manager Factory는 새로운 Entity Manager를 생성하고, Entity Manager는 DB Connection을 사용해서 DB와 통신을 합니다. Entity Manager는 인터페이스로서 사용자가 영속성 컨텍스트에 접근하여 상호작용 할 수 있도록 하는 역할을 수행합니다. 객체를 생성하고 영속성 컨텍스트에 넣으면 해당 객체는 영속 상태로서..
[JPA] JPA 시작! 실습 환경 IntelliJ Java 11(또는 8) H2 DataBase Maven 메이븐 프로젝트 생성 후 JPA 및 H2 Database 사용을 위해 관련 의존성을 추가합니다. Hibernate EntityManager Relocation H2 Database Engine Note 만약 자바 8 버전 이상을 사용하고 있다면, 아래와 같이 JAXB API 의존성을 추가해야 합니다. JAXB는 Java Architecture For XML Bind의 약자로, marshal(Java Object를 XML 문서로 변환), unmarshal(XML 문서를 Java Object로 매핑) 작업을 수행합니다. 문제는 자바 11 버전에서는 JAXB를 내장하고 있지 않기 때문에 의존성을 추가해서 외부 라이브러리를 당겨..
[JPA] Part.02_Hibernate를 활용한 JPA 사용(CRUD 연습) 사전 세팅 아래와 같이 3개의 파일을 생성한다. 파일 명칭은 본인이 컨트롤하는 테이블 명칭에 빗대어 작성해본다. - Product.java : DB에 테이블과 매칭되는 클래스. Entity를 생성한다. - ProductRepository.java : DB Layer에 접근하는 인터페이스 - ProductController.java : DB를 브라우저에서 요청하여 호출할 수 있도록 해주는 컨트롤러 Product.java package com.example.test.domain; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persisten..

반응형