Spring/JPA(6)
-
[JPA] 코틀린으로 엔티티 작성 시 고려할 점
최근 코틀린에 빠져서 코틀린으로 기존의 자바 작업들을 바꿔서 해보는 중이다. 그러다 코틀린에서 JPA를 쓰려고 하니 여러 가지 고려할 점이 생겨나 글을 작성하게 되었다. 먼저 JPA의 구현체인 Hibernate의 유저 가이드를 살펴보자. https://docs.oracle.com/javaee/5/tutorial/doc/bnbqa.html Entities - The Java EE 5 Tutorial Entities An entity is a lightweight persistence domain object. Typically an entity represents a table in a relational database, and each entity instance corresponds to a row ..
2022.02.08 -
[JPA] Fetch - Eager, Lazy
Fetch란? Fetch의 사전적 의미는 '(어디를 가서) ~을 가지고 오다' 라는 뜻이다. JPA에서도 이 의미는 일맥상통한다. JPA에서 Fetch는 엔티티의 필드에 DB에서 실제 값을 가져오는 것이고 가져오는 방법에는 여러가지가 있다. 먼저 두 엔티티를 살펴보자. @Entity class Department { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "department") private Set employees = new HashSet(); } @Entity class Employee { @Id @GeneratedValue private Long id; private String name; @M..
2021.12.04 -
[JPA] 연관관계[2/2] - 단방향
단방향 매핑 객체 간의 관계에서는 단방향으로 구현하는 경우가 많다. 지난 시간에 양방향을 알아봤으니 이번에는 단방향을 알아보도록 하자. 양방향을 잘 이해했다면 단방향도 금방 이해할 수 있다. 다대일 다대일 단방향인 경우 한 쪽에서만 연관관계를 가진다. 아래와 같은 경우는 Person이 N, Address는 1인 경우이며 Person에서만 Address를 참조하고 있다. 하지만 이는 DB와는 관계 없다. DB는 여전히 외래 키가 Person에 있는 상태이고 양방향으로 관계를 맺고 있다. 양방향인 경우에서 한 쪽의 참조만 없어진 것이라고 생각하면 된다. @Entity class Person { @Id @GenerateValue private Long id; @ManyToOne @JoinColumn(name ..
2021.12.03 -
[JPA] 연관관계[1/2] - 양방향
객체의 연관관계 객체에서는 참조를 통해서 객체 간의 연관관계를 맺는다. 아래와 같은 경우에는 서로에 대해 참조값을 가지고 있으므로 양방향 연관관계라고 볼 수 있다. @Entity class Person { @Id @GeneratedValue private Long id; private Address address; } @Entity class Address { @Id @GeneratedValue private Long id; private Set persons = new HashSet(); } Person에서 Address에 관심이 없는 경우에는 단방향 연관관계가 되며 다음과 같이 작성할 수 있다. @Entity class Person { @Id @GeneratedValue private Long id;..
2021.12.03 -
[JPA] JPA 사용 시 주의할 점
아래 코드를 살펴보자. public class DepartmentRepository { @PersistenceContext EntityManager em; public Department findById(Long id) { Department dept = em.find(Department.class, id); return dept; } } findById()는 id값으로 Department를 조회하여 해당 id의 객체를 가져온다. 그런데 이때 가져온 객체는 영속 상태일까? 결론부터 말하자면 아니다. em.find()를 처리하는 과정은 트랜잭션으로 수행된다. 그러나 가져온 이후의 값은 영속성 컨텍스트에서 관리되는 것이 아닌 단순 객체가 되는 것이다. 따라서 가져온 후의 처리 또한 영속성 컨텍스트로 관리하기..
2021.12.03 -
[JPA/Hibernate] Hibernate 기초
1. Hibernate란? Hibernate는 객체 지향 프로그래밍과 관계형 데이터베이스 설계의 관점 차이를 해결하여 개발자가 더 객체 지향 프로그래밍에 집중할 수 있도록 해주는 ORM 중 하나이다. Java 진영에서는 JPA가 표준 인터페이스로 있으며 구현체 중 가장 많이 사용되는 것이 Hibernate이다. 2. 환경 설정 파일 gradle 또는 maven 프로젝트는 기본적으로 src/main 디렉터리에서 java와 resources 패키지로 나뉘는데 resources에 대부분의 환경 설정 파일 및 정적 파일들이 포함된다. Hibernate의 환경 설정도 resources에서 작성하면 된다. 환경 설정의 대표적인 파일 형식으로 properties와 xml이 있다. 파일 이름은 hibernate.pro..
2021.10.12