본문 바로가기

데이터베이스10

[Database] 식별 관계, 비식별 관계 식별 관계(Identifying Relationship) 식별 관계는 개체 A, B 사이의 관계에서 A개체의 기본 키가 B 개체의 외래 키이면서 동시에 기본 키가 되는 관계를 말한다. 즉, B 개체의 존재 여부가 A 개체의 존재 여부에 의존적인 관계이다. 식별 관계는 ER-Diagram에서 실선으로 표현한다. 비식별 관계(Non-Identifying Relationship) 비식별 관계는 개체 A, B 사이의 관계에서 A개체의 기본 키가 B 개채의 기본 키가 아니면서 외래 키인 관계를 말한다. 즉, B 개체의 존재 여부는 A 개체의 존재 여부와 상관이 없는 관계이다. 비식별 관계는 ER-Diagram에서 점선으로 표현한다. 2021. 12. 31.
[MySQL] DELIMITER - 구분 문자 변경하기 일반적인 프로그래밍 언어에서와 마찬가지로 MySQL에서도 세미콜론(;)을 사용하여 쿼리문을 구분하는데, DELIMITER 문을 사용하여 구분 문자를 세미콜론이 아닌 다른 문자로 변경할 수 있다. DELIMITER 사용할_구분_문자이러한 DELIMITER는 스토어드 프로시저의 범위를 구분하기 위해 사용된다. CREATE PROCEDURE 안에서도 마찬가지로 구분 문자로 세미콜론(;)이 사용되는데 이렇게 되면 어디까지가 스토어드 프로시저의 범위인지 구분하기 어려워진다. 그래서 프로시어의 범위를 구분하기 위해 다음과 같이 DELIMITER를 사용하여 일시적으로 구분 문자를 변경한다. DROP PROCEDURE IF EXISTS findMemberByName; DELIMITER $$ -- 구분 문자를 $$로 변.. 2021. 12. 26.
[JPA] 값 타입 컬렉션 : @ElementCollection, @CollectionTable JPA에서 데이터 타입은 엔티티 타입과 값 타입으로 분류할 수 있다. 여기서 값 타입은 단순히 값으로 사용하는 자바의 프리미티브 타입이나 객체를 말한다. 값 타입의 분류 기본값 타입 : 자바 프리미티브 타입, 래퍼 클래스(Integer, Long 등), String 임베디드 타입(복합 값 타입) 값 타입 컬렉션 : 값 타입을 여러 개 저장하고자 할 때 사용하며, 자바의 컬렉션을 사용한다. 값 타입 컬렉션 @ElementCollection, @CollectionTable 애노테이션을 붙여 값 타입 컬렉션을 사용할 수 있다. //임베디드 타입 @Embeddable public class Address { private String city; private String street; private String.. 2021. 3. 24.
[JPA] Cascade(영속성 전이), OrphanRemoval(고아객체 제거) cascade : 영속성 전이 JPA에서 Cascade 옵션을 사용하면 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들 수 있다. 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함을 제공한다. @Entity public class Parent { @Id @GeneratedValue private Long id; //cascade 옵션 적용 @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) private List childList = new ArrayList(); public List getChildList() { return childList; } public Long getId() { return id; } }.. 2021. 3. 17.
[JPA] @MappedSuperClass 여러 엔티티에서 공통적으로 사용하는 속성들을 부모 클래스로 뽑아내고, @MappedSuperClass 애노테이션을 적용하면 DB 테이블에는 영향을 주지 않고 코드상 중복을 제거할 수 있다. @Entity public class Teacher { @Id @GeneratedValue @Column(name = "teacher_id") private Long id; private String name; private String subject; } @Entity public class Student { @Id @GeneratedValue @Column(name = "student_id") private Long id; private String name; private String grade; } 예를 들어 .. 2021. 3. 13.
JPA JPQL 페치 조인(fetch join) JPA에서 일반적인 조인을 사용하면 연관된 엔티티는 함께 조회하지 않는다. 그렇기 때문에 N+1 문제가 발생할 수 있는데, 페치 조인을 사용하면 연관된 엔티티를 한 번의 쿼리로 모두 가져올 수 있다. 참고로 N+1 문제란 하나의 쿼리를 날리는데 조회되는 결과의 개수만큼의 쿼리가 추가적으로 나가는 것을 말한다. Member 엔티티와 Team 엔티티가 1:N 단방향 연관 관계를 가지는 상황을 예로 들어보자. Member 엔티티 @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Member { @Id @GeneratedValue private Long id; private String name; @ManyToOne(fetch = F.. 2021. 2. 21.