[정리] 기능별 개념 정리/JPA(16)
-
JPA delete
# JPA 에서 CascadeType.REMOVE 을 적어주는 것은 JPA 쪽에서 외래키를 쫓아가며 알아서 삭제해주도록 하는 옵션이다. JPA 가 생성하는 DDL에 ON DELETE CASCADE 를 적어주거나 하는 것이 아니다. # JPA 가 생성하는 DDL에 ON DELETE CASCADE 를 달아주고 싶다면 @OnDelete(action= OnDeleteAction.CASCADE) 를 사용하면된다. # 사견 : JPA 에는 CascadeType.REMOVE 가 달려있고 DDL 에는 ON DELETE CASCADE 가 달려있지 않는 경우가 관리적인 면에서 좀 더 안정적으로 보인다. DDL 에는 ON DELETE CASCADE 가 걸려있지 않으므로 DB 에 직접 접근하여 DELETE 쿼리를 사용하는 경..
2019.06.12 -
Differences between @Entity(name) and @Table(name)
JPQL 에서 쿼리의 테이블 이름은 엔티티의 클래스 이름을 입력하는 것이 기본이다. MemberEntity @Data @Entity @Table(name = “member_table”) public class MemberEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(updatable = false, nullable = false) private long id; private String name; } member_table 테이블을 만들고 이는 MemberEntity로 맵핑된다. MemberEntity 의 이름은 MemberEntity 이다. MemberRepository public interface MemberRepo..
2019.05.20 -
영속성 컨텍스트 정리
Hibernate 에서는 EntityManagerFactory = SessionFactory, EntityManager = Session 이라고 불렸다. 즉 EntityManager 의 역할은 세션, Transaction 의 관리다. 영속성 컨텍스트의 장점 1. 캐시 2. 쓰기 지연 3. 로딩 지연 (프록시로 구현 : 없는 시점에 가져오도록 되어있음) 4. 변경 감지 (update 메소드가 없어도 된다) 5. 동일성 보장 (영속성 컨텍스트의 data는 DB와 동일하다.)
2019.05.20 -
Orphan removal vs Cascade.remove
Orphan removal 는 OneToMany OneToOne 일 때 사용 가능하다. OneToOne : Orphan removal vs Cascade.remove Cascade.remove @Entity class Parent { @OneToMany(cascade=CascadeType.REMOVE) List children; } parentRepository.delete(parentA) 하면 children 들도 같이 제거가된다. parentA.setChildren(null) = 부모가 자식을 버리는 행위 -> 자식은 고아가 된다. -> 하지만 이를 save, flush 하지 않으면 DB에서 되지 않는다. Orphan removal @Entity class Parent { @OneToMany(orph..
2019.05.16 -
JPA 양방향 맵핑, Test 코드 작성시 유의사항
@Entity @Table(name="team") public class Team { @Id @Column(name="team_id") @GeneratedValue(strategy= GenerationType.IDENTITY) private long id; @OneToMany(mappedBy="team") private List members; } @Entity @Table(name="member") public class Member { @Id @Column(name="member_id") @GeneratedValue(strategy= GenerationType.IDENTITY) private long id; private String name; @ManyToOne @JoinColumn(name="te..
2019.04.25 -
JPA - Mapped By 의 필요성, '관계의 주인' 의미
Owner of relation != Owing side Owner of relation 이라는 표현은 어디에서 나온 것인가? 관계를 표현하는데 있어서 가장 중요한 것은 foreign key 가 바라보는 대상이 누구인지이다. 즉 foreign key 는 관계를 나타내는데 굉장히 중요한 단서이다. 그래서 'Foreign key' = '관계의 핵심' = '관계의 주인' 이라고 한다. Team ~ Member 사이의 일대다 관계가 있다고 생각해보자. @Entity @Table(name="team") public class Team { @Id @Column(name="team_id") private long id; @OneToMany(mappedBy="team") private List members; } @E..
2019.04.25