본문 바로가기

IT/데이터베이스

(16)
[JPA] failed to lazily initialize a collection 0. 에러 상황 TestCode 작성 중 단순 save - find 코드를 작성했는데 아래와 같은 에러가 발생 failed to lazily initialize a collection of role: com.demo.jpastudy.entity.UserEntity.addressList, could not initialize proxy - no Session org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.demo.jpastudy.entity.UserEntity.addressList, could not initialize proxy - no Session at app//org.hib..
[JPA] Null value was assigned to a property exception 1. 에러 원인 JPA를 사용해 개발을 하다 보면 database column은 nullabel 속성이지만 entity의 field는 primitive 타입으로 설정할 때가 있다. 그럴 때 primitive type에는 null 값을 할당할 수 없어 해당 에러가 발생한다. 2. example Entity 설정 code // TestEntity.java @Getter @Setter @NoArgsConstructor @AllArgsConstructor @Entity public class TestEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private int testPriority; } // TestRep..
JPA 낙관적 잠금 (Optimistic locking)을 알아보자 0. 목차 * 이 글은 MySQL을 기본으로 예제 및 시나리오를 작성합니다. 목차 1. 낙관적 잠금이란? 1.1 MySQL 엔진 level과 스토리지 엔진 level MySQL에서 사용되는 잠금은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눠볼 수 있다. MySQL 엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미치게 되지만 스토리지 엔진 레벨의 잠금은 스토리지 엔진 간 상호 영향을 미치지는 않는다. 낙관적 잠금은 InnoDB 스토리지 엔진 잠금의 한 종류이다. 1.2 비관적 잠금과 낙관적 잠금 1.2.1 비관적 잠금 현재 트랜잭션에서 변경하고자 하는 레코드에 대해 잠금을 획득하고 변경 작업을 처리하는 방식 '변경하고자 하는 레코드를 다른 트랜잭션에서도 변경할 수 있다'라는 비관적인 가정을 하..
JPA 공부 - 6 2021/02/07 - [IT/데이터베이스] - JPA 공부 - 5 6. 다양한 연관관계 매핑 엔티티의 연관관계를 매핑할 때는 다음 3가지를 고려해야 한다. 다중성 단방향, 양방향 연관관계의 주인 다중성 다대일 (@ManyToOne) 일대다 (@OneToMany) 일대일 (@OneToOne) 다대다 (@ManyToMany) 다중성을 판단하기 어려울 때는 반대방향을 생각해 보면 된다. 단방향, 양방향 객체는 참조용 필드를 가지고 있는 객체만 연관된 객체를 조회할 수 있다. 객체 관계에서 한쪽만 참조하는 것을 단방향 관계라고 하고, 양쪽이 서로 참조하는 것을 양방향 관계라고 한다. 연관관계의 주인 테이블과는 다르게 엔티티를 양방향으로 매핑하면 서로를 A -> B, B -> A 서로를 참조한다. JPA는 두 ..
JPA 공부 - 3 2021/01/21 - [IT/데이터베이스] - JPA 공부 - 2 3. 영속성 관리 JPA가 제공하는 기능은 크게 두 가지가 있음 엔티티와 테이블을 매핑하는 설계 부분 매핑한 엔티티를 실제로 사용하는 부분 엔티티 매니저는 엔티티를 저장 / 수정 / 삭제 / 조회하는 등 엔티티와 관련된 일을 한다. 엔티티 매니저는 엔티티를 저장하는 가상의 데이터베이스로 생각하면 된다. 3.1 엔티티 매니저 팩토리와 엔티티 매니저 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 EntityManagerFactory 를 하나만 생성하고, 엔티티 매니저 팩토리에서 엔티티 매니저를 생성하여 사용한다. 엔티티 매니저 팩토리를 생성하는 비용은 상당히 크고 팩토리에서 엔티티 매니저를 생성하는 비용은 적다. 엔티티 매니저 팩토..
JPA 공부 - 5 2021/01/29 - [IT/데이터베이스] - JPA 공부 - 4 5. 연관관계 매핑 기초 객체는 참조(주소)를 사용해서 관계를 맺고 테이블은 외래 키를 사용해서 관계를 맺는다. 객체의 참조와 테이블의 외래 키를 매핑해보자 방향 예를 들어 회원과 팀이 있을 때 둘 중 한쪽만 참조하는 것을 단방향 관계라고 한다. 반대로 양쪽 모두 서로 참조하는 것을 양방향 관계라 한다. 방향은 객체관계에서만 존재하고 테이블은 항상 양방향이다. 다중성 [다대일(N:1)], [일대다(1:N)], [일대일(1:1)], [다대다(N:M)] 다중성이 있다. 회원과 팀 관계에서 여러 회원은 한 팀에 속하므로 회원과 팀은 다대일 관계다. 반대로 한 팀에 여러 회원이 소속될 수 있으므로 팀과 회원은 일대다 관계다. 연관관계의 주인 객..
JPA 공부 - 4 2021/02/25 - [IT/데이터베이스] - JPA 공부 - 3 4. 엔티티 매핑 JPA를 사용하는 데 가장 주우요한 일은 엔티티와 테이블을 정확히 매핑하는 것이다. JPA는 다양한 매핑 어노테이션을 지원하는데 크게 4가지로 분류할 수 있다. 객체와 테이블 매핑 기본 키 매핑 필드와 컬럼 매핑 연관관계 매핑 4.1 @Entity JPA를 사용해 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 부여야 한다. @Entity가 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라 부른다. 주의사항 기본 생서자 필수 final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 저장할 필드에 final 을 사용하면 안 된다. 4.2 @Table @Table은 엔티티와 매핑할..
JPA 공부 - 2 2021/01/18 - [IT/데이터베이스] - JPA 공부 - 1 JPA 공부 - 1 2021/01/17 - [IT/데이터베이스] - JPA 공부 - 0 1. JAP 소개 1.1 SQL을 직접 다룰 때 발생하는 문제점 관계형 데이터베이스는 가장 대중적이고 신뢰할 만한 안전한 저장소 JDBC API 를 사용해서 SQL을 데이터 demoversion.tistory.com 2. JPA 시작 2.1 이클립스 설치와 프로젝트 불러오기 예제 경로 https://github.com/holyeye/jpabook 2.2 H2 데이터베이스 설치 다운로드 경로 : https://www.h2database.com/ 2.3 라이브러리와 프로젝트 구조 위 3개 챕터는 설정이라 넘어감 2.4 객체 매핑 시작 회원 테이블 CREA..
JPA 공부 - 1 2021/01/17 - [IT/데이터베이스] - JPA 공부 - 0 1. JAP 소개 1.1 SQL을 직접 다룰 때 발생하는 문제점 관계형 데이터베이스는 가장 대중적이고 신뢰할 만한 안전한 저장소 JDBC API 를 사용해서 SQL을 데이터베이스에 전달 1.1.1 반복 예를들어 회원 관리 기능을 개발해 보자 회원 관리용 객체 생성 및 회원용 DAO 생성 // 회원 객체 public class Member { private String memberId; private String name; ... } // 회원용 DAO public class MemberDAO { public Member find (String memberId) {...} } 회원 조회용 기능 개발 회원 조회용 SQL 작성 SELECT M..
JPA 공부 - 0 2021/01/18 - [IT/데이터베이스] - JPA 공부 - 1 2021/01/21 - [IT/데이터베이스] - JPA 공부 - 2 2021/02/25 - [IT/데이터베이스] - JPA 공부 - 3 2021/01/29 - [IT/데이터베이스] - JPA 공부 - 4 2021/02/07 - [IT/데이터베이스] - JPA 공부 - 5 2021/02/25 - [IT/데이터베이스] - JPA 공부 - 6 JPA SYUDY 참고 서적 : 자바 ORM 표준 JPA 프로그래밍 학습 방식 책 정리 예제 코드 실습 PLAN (책 목차에 따라 진행) JPA 소개 (1주차) JPA 시작 (2주차) 영속성 관리 (3주차) 엔티티 매핑 (4주차) 연관관계 매핑 기초 (5주차) 다양한 연관관계 매핑(6주차) 고급 매핑 상..