본문 바로가기

개발/Jpa

[JPA] Cascade & OrphanRemoval 어떤 엔티티를영속 상태로 만들 때, 연관된 엔티티도 함께 영속화 하고 싶을때, cascade 옵션을 통해 영속성 전이를 할 수 있다. 먼저 부모 엔티티를 영속화 할때 CascadeType 옵션을 주면 되는데, 아래의 6가지 옵션이 있다. ALL PERSIST MERGE REMOVE REFRESH DETACH 이 중 일반적으로 사용되는 ALL, PERSIST, REMOVE로 살펴본다. 하나의 Item 엔티티가 있고, 그 안에서 Option, OptionDetail 엔티티가 있는데, Option이 부모 엔티티, OptionDetail 엔티티가 자식 엔티티이다.(편의상 Item 엔티티는 제외한다) 먼저 cascade를 설정하지 않은 경우를 보자. @Entity @Getter @Builder @AllArgsCo.. 더보기
@Embedded, @Embeddable JPA 엔티티를 구성함에 있어, 엔티티를 DB중심적이기 보다는, 객체지향적으로 만들고자 한다면 임베디드 타입을 사용하면 좋다. 임베디드 타입은 코드의 재사용을 가능하게 하고, 응집도를 높여준다. @Embedded : 값 타입을 사용하는 곳에 표시 @Embeddable : 값 타입을 정의하는 곳에 표시 * 기본 생성자 필요 위와 같이 Embeddable 로 설정한 값들을 Entity에 Embedded로 지정해줄 수 있다. 이렇게 되면, 다른 Entity에도 Embedded로 같은 값들로 지정이 가능하게 된다. Entity를 저장할때는 아래와 같이 한다. DB에는 Embeddable 클래스의 변수들이 각각의 값이 컬럼으로 저장된다. 출처 : https://velog.io/@seongwon97/Spring-B.. 더보기
[JPA] JPA의 어노테이션(1) JPA는 자바의 대표적인 ORM(Object Relational Mapping) 프레임워크이다. 즉 객체지향언어의 객체를 RDBMS(관계형데이터베이스)와 자동으로 매핑해주는 개념이고, JPA는 이러한 ORM의 대표적인 기술 표준이다. 이전 글에서도 간단히 몇 가지를 언급하였지만, JPA에서 주로 사용되는 어노테이션이 어떤 것들이 있는지 기록해본다. @Entity : 테이블과 1:1로 매칭이 되는 객체의 단위이며 엔티티에는 적어도 하나의 Id가 필요하다 @Id : DB 테이블은 기본적으로 유일한 값(Primary Key)을 가진다. JPA에서는 이러한 PK를 @Id를 통해 지정해준다. @Table(name = "XXXX") : 엔티티의 클래스명 그대로 테이블명을 사용한다면 상관없지만, 따로 매핑되는 테이블.. 더보기
[Jpa]처음 접하는 Jpa 실무에서 jdbc(JdbcTemplate)와 mybatis만 사용하다가 이번 인프런 스프링 강의를 통해 Jpa를 처음 접해보게 되었다. 원래 개발자가 직접 쿼리를 작성하지 않고 객체를 통해 DB와 통신하는 기술임은 알고 있었지만, 직접 구현하여 보니 더 새롭게 느껴졌다. 사전에 설정이 필요하긴 하지만.. 단순히 DB에 접근하는 로직만 먼저 살펴보자면 먼저 도메인으로 생성한 변수들에 대해 @Entity어노테이션 설정과 primary key에 해당하는 값을 @Id로 지정한다 (여기에서 DB상의 id가 자동으로 증가하는 값으로 설정되어 있으므로..IDENTITY로 지정) Repository에서 EntityManager 객체를 import하여 생성자로 주입해준다. 이후 각 메소드들이 가지고 있는 기능을 생성한 .. 더보기