영속성 전이 한 개의 엔티티를 persist 할 때에 영속성 전이 설정이 되어 있는 엔티티도 자동으로 persist 해주는 것이다. 간단하게 Parent와 Child 객체를 예로 들면 Parent.java @Entity public class Parent { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String name; @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true) private List childList = new ArrayList(); public void addChild(Child child){ childList..
앞서 Lazy Loading에 대해서 잠깐 언급하고 넘어간 적이 있다. 한번에 엔티티에 해당하는 모든 데이터를 가져오는 것이 아닌 필요할때(호출시) 가져온다는 로딩 방식이었다. 여기서 프록시라는 개념이 있다. 보통 IT쪽에서 프록시는 네트워크에서 많이 들어본 단어일 것이다. JPA에서 프록시도 크게 다르지 않은 개념인 것 같다. 즉, 필요한 것으로 넘어가기 위한 중간 단계 역할의 객체를 놓는 것이다. Lazy Loading을 보면 바로 객체를 가져오는 것이 아닌 프록시 객체를 가져온 뒤, 그 프록시 객체를 통해서 실제 엔티티에 접근하게 된다. 프록시와 실제 엔티티는 상속을 받은 구조이기 때문에 겉모양이 동일하다. 이러한 특징으로 사용자는 프록시와 실제 엔티티를 사용하는데에 다른점이 없이 사용 가능하다. ..
엔티티를 설계하다보면 공통적으로 들어가는 멤버 변수들이 많이 있다. 예를 들어 운영시 필요한 생성시간, 생성한 유저, 변경시간, 변경한 유저 등... 이것을 일일히 적어도 되지만 반복을 피할수록 좋기 때문에, 이것을 @MappedSuperclass를 통해서 해결할 수 있다. 다음처럼 공통되는 변수를 묶은 클래스를 만들어 준다. (해당 변수들에 필요한 제약조건들은 동일하게 붙혀주면 된다.) @MappedSuperclass public abstract class BaseEntity { @Column(name = "INSERT_MEMBER") private String createdBy; private LocalDateTime createDate; private String lastModifiedBy; pri..
1:N 연관관계 맵핑 연관관계 맵핑이란 JPA가 관계형 DB와 연결되면서 관계형 DB의 정규화 과정을 표현하는 것이다. 예를 들어 team의 입장에서는 member가 여러명이라는 것에서 team과 member는 1:N 관계가 되는 것이다. @Entity public class Member{ /* ~~ */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; /* ~~*/ } @Entity public class Team{ /* ~~ */ @OneToMany(mappedBy = "team") private List members = new ArrayList(); } team 1개에 member가 여러명이라 O..
JPA와 DB의 맵핑을 알아보기 전에 우선 application의 설정에 대해서 알아볼 필요가 있다. spring: jpa: hibernate: ddl-auto: none 다음 설정에 대해서 운영환경에서 많은 영향을 미치기 때문이다. DDL이란 데이터베이스 스키마를 자동 생성하는 설정이다. 따라서 DB는 운영환경에서 매우 중요하기 때문에 해당 설정도 매우 중요하다고 할 수 있다. 운영장비에서는 절대 create, create-drop, update를 사용하면 안된다. 왜냐하면 해당 DB의 정보들이 모두 날아갈 위험이 있기 때문이다. 개발초기에는 create, update 테스트 서버에는 update, validate 스테이징 운영단계에 있는 서버는 validate, none을 사용하는 것이 좋다. 필자는..
JPA는 기본적으로 영속성 컨텍스트에 의해서 관리된다. 영속성 컨텍스트에 대해 자세하게 설명하기 전에 내가 느낀 영속성 컨텍스트는 DB로 저장하기 전, 중간 다리 같은 느낌을 많이 받았다. 영속성 컨텍스를 접근하기 위해서는 EntityManager를 통해서 접근하게 된다. EntityManager는 DB에 요청이 있을때마다 EntityManagerFactory에서 생생해주게 된다. EntityManagerFactory는 이름에서 느껴지듯 EntityManager를 만들어주는 용도의 객체이다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager()..
- Total
- Today
- Yesterday
- feign client
- Java
- NextJS
- logback
- API
- 리액트
- rhel
- consumer
- frontend
- KAFKA
- Container
- 프론트엔드
- docker
- spring boot
- apache kafka
- zookeeper
- apache
- OS
- spring
- centos
- Linux
- JPA
- Firebase
- K8S
- Producer
- Front
- React
- broker
- cs
- Data Engineering
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |