분류 전체보기
-
JPA 연관 관계의 주인과 소유 측: 개념 및 예제JPA 2024. 5. 4. 18:26
JPA 연관 관계에 대한 학습을 하다보면 관계의 주인이라는 표현이 나온다.이에 대해 자세히 알아보자.예제 코드// In Customer class:@OneToMany(mappedBy="customer")private Set orders;// In Order class:@ManyToOneprivate Customer customer;The owner of the relationship (관계의 주인)"관계의 주인(The owner of the relationship)"은 엔티티 클래스 자체가 아니라, 관계를 관리하는 필드 또는 프로퍼티를 의미한다.JPA의 레퍼런스 어디에서도 엔티티 클래스에 owner라는 표현을 쓰지 않는다.예제 코드에서 Order 클래스의 customer 필드가 관계의 주인이다.이는 외래..
-
JPA 연관 관계 어노테이션의 속성 분석JPA 2024. 5. 4. 16:04
JPA의 연관 관계를 정의하는 어노테이션에는 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany가 있다.그리고 각 어노테이션에는 여러 가지 속성들로 관계를 더 명확히 정의하는 방법을 제공한다.이 글에서는 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany의 각 속성의 목적과 사용 방법에 대해 알아보자.targetEntity목적: 연관 대상 엔티티 클래스를 지정한다.기본 값*ToOne: 관계를 저장하는 필드 또는 프로퍼티의 타입. 즉, 어노테이션이 붙은 필드 또는 프로퍼티의 타입.*ToMany: collection의 parameterized type. 단, collection이 Java generic을 사용하여 정의되었을 때에만 적용된다. 그..
-
JPA : 영속성 전이(Cascade)JPA 2024. 5. 2. 21:42
JPA에서 영속성 전이(Cascade)는 엔티티의 상태 변화를 관련된 엔티티들에게도 전파하는 메커니즘을 말한다. 즉, 한 엔티티에 대한 특정 연산(예: 저장, 삭제, 병합)이 그 엔티티와 관련된 다른 엔티티들에게도 적용되도록 할 수 있다. 이는 엔티티 간의 관계를 정의할 때 설정할 수 있는 옵션이며, 코드를 보다 깔끔하게 유지하고 데이터 일관성을 보장하는 데 도움이 된다.CascadeType 종류JPA에서는 다음과 같은 종류의 CascadeType 옵션이 있다.1. CascadeType.ALL설명: ALL 옵션은 모든 캐스케이드 타입(PERSIST, MERGE, REMOVE, DETACH, REFRESH)을 적용한다.모든 영속성 관련 연산이 연관된 모든 엔티티에도 적용된다.적용 사례: 엔티티와 연관된 모..
-
Spring Data JPA 가이드 모음JPA 2024. 5. 2. 00:18
Spring Boot/JPA 시작하기작성 중..Spring Boot에서 JPA 시작하기JPA 연관 관계JPA : 영속성 전이(Cascade)JPA 연관 관계의 주인과 소유 측: 개념 및 예제JPA 연관 관계 어노테이션의 속성 분석부록JPA에서 신규 엔티티 처리: EntityManager.persist()와 JpaRepository.save()의 차이점 파악하기Spring Boot JPA : Java 날짜/시간 데이터 타입과 JPA, MySQL 타임존의 관계참고 자료Baeldung - All Spring Data GuidesBaeldung - Learn JPA & HibernateBaeldung - N+1 Problem in Hibernate and Spring Data JPA[책] 자바 ORM 표준 JP..
-
JPA에서 신규 엔티티 처리: EntityManager.persist()와 JpaRepository.save()의 차이점 파악하기JPA 2024. 4. 30. 22:08
동일한 신규 Entity를 생성하여 EntityManager.persist()와 JpaRepository.save()를 통해 영속화 시켰을 때의 동작과 결과가 다를 때가 있다. 이에 대해 알아보자.EntityManager.persist()persist()를 호출할 때 전달된 엔티티 인스턴스 자체가 영속 상태가 되어 변화를 추적한다. 이 메소드는 반환값이 없으며, 저장하는 객체와 영속성 컨텍스트에 들어간 객체가 동일한 참조를 유지한다.JpaRepository.save()save() 메소드는 내부적으로 EntityManager의 persist() 또는 merge()를 호출할 수 있다. 이 메소드의 행동은 전달된 엔티티의 상태에 따라 달라진다.신규 엔티티일 경우: 일반적으로 persist()가 호출되어 엔티티..
-
Docker 컨테이너 실행 실패할 때 컨테이너 내부 파일 시스템 확인하는 방법Docker 2024. 4. 12. 16:58
컨테이너가 실행 실패하거나 바로 종료되는 경우에도 몇 가지 방법으로 컨테이너 내부 파일 시스템을 확인할 수 있다. 여기에는 docker cp 명령어를 사용하는 방법, docker commit을 활용하는 방법, 그리고 컨테이너를 실행할 때 특정 명령어를 오버라이드하여 진입하는 방법 등이 있다. 1. docker cp 명령어 사용하기 실행 실패로 종료된 컨테이너가 있고, 그 컨테이너의 ID 또는 이름을 알고 있다면, docker cp 명령어를 사용하여 호스트 시스템과 컨테이너 간에 파일을 복사할 수 있다. 이 방법으로 컨테이너 내부의 파일이나 디렉토리를 호스트 시스템으로 가져올 수 있다. docker cp :/path/to/container/file/or/directory /path/to/host/desti..
-
Spring Boot JPA : Java 날짜/시간 데이터 타입과 JPA, MySQL 타임존의 관계Spring Boot 2024. 4. 11. 01:42
Java 타입과 MySQL 저장 타입별 분석 최종 결론타임존이 필요한 시간을 저장할 때는 ZonedDateTime을 MySQL의 datetime에 저장하는 방식을 사용하자.장점: 다른 어떤 타임존 설정에도 영향받지 않는다.단점(아닐 수도): DB에는 항상 UTC 기준 시간으로 저장되고 조회된다.Java의 Date 타입은 DB 타임존과 DB 세션 타임존을 일치시켜서 MySQL의 timestamp에 저장해야 정확한 시간 값을 저장하고 조회할 수 있다.Java의 Calendar 타입은 DB 타임존과 DB 세션 타임존, Calendar 타임존을 일치시켜서 MySQL의 timestamp에 저장해야 정확한 시간 값을 저장하고 조회할 수 있다.Java의 LocalDateTime 타입은 시스템 기본 타임존과 DB 세션..
-
MySQL에서 time zone offset을 지정하여 데이터 삽입하기MySQL 2024. 4. 10. 19:27
MySQL에서 time zone offset 사용해보기 다음과 같은 쿼리문은 MySQL에서 실행이 잘 될까? INSERT INTO ts (col) VALUES ('2020-01-01 10:10:10'), ('2020-01-01 10:10:10+05:30'), ('2020-01-01 10:10:10-08:00'); MySQL 서버 버전에 따라 다르다. MySQL 8.0.19 부터 TIMESTAMP와 DATETIME 타입의 컬럼에 데이터를 삽입할 때, time zone offset을 지정할 수 있다. 그 이하의 버전에서 위의 쿼리를 실행하면 다음과 같은 에러를 볼 수 있다. [22001][1292] Data truncation: Incorrect datetime v..