개발하는 쿠키
article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 06. 다양한 연관관계 매핑
Coding/computer science 2023. 9. 18. 10:54

엔티티의 연관관계를 매핑할 때는 다음을 고려해야 한다. - 다중성 (다대일, 일대다, 일대일, 다대다) - 단방향, 양방향 - 연관관계의 주인: 5장에서 연관관계의 주인인 테이블에서 외래키를 관리할 수 있었다. 관계에서 왼쪽에 있는 엔티티가 연관관계의 주인이다. ex) 다대일 -> 다가 주인 일대다 -> 일이 주인 다대일 다대일 단방향 vs 다대일 양방향 위 그림에서 실선은 연관관계의 주인이고, 점선은 연관관계의 주인이 아니다. Member 가 연관관계의 주인이고, Team 은 연관관계의 주인이 아니다. 다대일 단방향 다대일 단방향은 회원 엔티티에만 매핑 관련 코드를 넣으면 된다. 다대일 양방향도 같은 회원 엔티티를 사용한다. @Entity public class Member { .... @ManyToO..

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 05. 연관관계 매핑 기초
Coding/computer science 2023. 9. 12. 00:39

단방향 연관관계 회원테이블과 팀 테이블이 있다. 회원은 하나의 팀에만 속할 수 있고, 1개의 팀에는 여러 명의 회원이 있다. Member : Team = 다 : 1 관계이다. Member가 다고, Team이 1이다. 객체 연관관계 회원 객체, 팀 객체는 단방향 관계다. Member.team : Member 객체에서 Team객체는 참조 가능하다. Team.member : Team객체에서 Member객체는 참조할 수 없다. 테이블 연관관계 회원 테이블, 팀 테이블은 양방향 관계다. 회원 테이블의 TEAM_ID로 팀 테이블 조인 가능하다. MEMBER JOIN TEAM, TEAM JOIN MEMBER 가 가능하므로 양방향 관계이다. 객체 연관관계와 테이블 연관관계의 가장 큰 차이 객체는 클래스에 다른 클래스 ..

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 04. 엔티티 매핑
Coding/computer science 2023. 9. 6. 01:31

- 객체와 테이블 매핑: @Entity, @Table - 기본 키 매핑: @Id - 필드와 컬럼 매핑: @Column - 연관관계 매핑: @ManyToOne, @JoinColumn @Entity JPA가 관리하는 클래스라는 의미이므로 필수로 붙여야 한다. 기본 생성자는 필수다. final class, enum class, interface, inner class 에는 사용할 수 없다. 지정할 필드에 final을 사용하면 안된다. @Table 엔티티와 매핑할 테이블을 지정한다. 다양한 매핑 사용 필드의 자료형마다 적절한 JPA어노테이션을 사용할 수 있다. @Entity @Table(name="MEMBER") pulblic class Member { @Id @Column(name = "ID") private..

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 03. 영속성 관리
Coding/computer science 2023. 8. 29. 23:56

엔티티 매니저: 엔티티를 저장, 수정, 삭제 조회하는 일을 처리한다. 엔티티를 저장하는 가상의 데이터베이스로 생각하면 된다. 엔티티 매니저 팩토리와 엔티티 매니저 데이터베이스를 1개만 사용하는 경우 EntityManagerFactory도 1개만 생성한다. // 공장 만들기, 비용이 많이 든다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); persistence.xml에 있는 정보를 바탕으로 DB Driver, user name, password, jdbc url을 설정해서 EntityManagerFactory를 만든다. 이후 필요할 때마다 엔티티 매니저를 생성한다. // 공장에서 엔티티 매니저 생성 비용이 거의 ..

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 02. JPA 시작
Coding/computer science 2023. 8. 22. 06:12

책과는 다르게 Intellij, Gradle 설정을 사용했습니다. Intellij 프로젝트 만들기 File > New > Project 를 통해 새로운 프로젝트를 만든다. Spring Initializr Generator를 클릭한 후 원하는 프로젝트 이름과 저장소를 정하고, Next를 누른다. Lombok, Spring Boot Dev Tools, Spring Data JPA Depentency를 선택 후 Create를 누른다. Intellij 에 H2 데이터베이스 연결 설정하기 Intellij 오른쪽 탭에서 Database > + > Data Source > H2 를 선택한다. H2데이터베이스 서버가 없으면 설치하라는 메시지가 나온다. Download를 클릭해서 설치하면 된다. build.gradle파..

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 01. JPA 소개
Coding/computer science 2023. 8. 21. 23:50

JPA 장점 CRUD SQL을 알아서 처리한다. 객체 모델링과 관계형 데이터베이스 사이의 차이점을 해결한다. 데이터베이스 종류를 쉽게 바꿀 수 있다. MySQL -> 오라클 SQL을 직접 다룰 때 발생하는 문제점 자바로 작성한 애플리케이션은 JDBC API를 사용해서 SQL을 DB로 전달한다. 반복, 반복 그리고 반복 객체를 데이터베이스에 CRUD 하기 위해서는 많은 SQL, JDBC API 가 필요하다. 각각의 테이블마다 이 작업을 반복해야 하는데, 그럴 때마다 비슷한 코드를 작성해야 한다. // 회원 객체 public class Member{ private String memberId; private String name; } // 회원용 DAO public class MemberDAO{ public..

article thumbnail
BUG | Mapstruct NullPointerException because "sym" is null
Coding/trouble shooting 2023. 7. 10. 14:43

문제를 발견하게 된 과정 Oracle Open JDK17에서 빌드할 땐 잘 되는데 Gitlab CLI로 DEV에 Build하면 오류가 발생했습니다. builds/[파일경로]/[파일명].java:11: error: Internal error in the mapping processor: java.lang.NullPointerException: Cannot invoke "com.sun.tools.javac.code.Symbol.getEnclosingElement()" because "sym" is null 문제 코드 import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.ReportingPolicy; @Mapper(com..

article thumbnail
JPA Proxy
Coding/computer science 2023. 6. 21. 15:00

JPA 프록시란? 프록시는 JPA에서 지연 로딩(Lazy Loading)을 구현하기 위해 사용되는 기술입니다. 지연 로딩(Lazy Loading)은 DB에서 연관된 엔티티를 필요한 시점에 가져오는 기능으로 즉시 로딩(Eager Loading)과 반대되는 개념입니다. JPA프록시는 실제 엔티티 대신 가짜 엔티티를 가져옵니다. 엔티티 A, B가 연관 관계에 있다고 가정할 때, A의 실제 엔티티를 조회하면서 B의 가짜 엔티티를 가져오는 것입니다. 그리고 B를 조회할 때, 진짜 엔티티를 가져옵니다. 따라서 B가 필요할 때까지는 조회 쿼리를 실행하지 않고, 프록시 객체를 반환하기 때문에 성능을 최적화할 수 있습니다. JPA 프록시 작동 원리 1. Order 클래스와 Customer 클래스가 다 : 1 의 연관관계..

반응형