12-2. JPA

동동주·2024λ…„ 6μ›” 9일
0

spring 기말고사

λͺ©λ‘ 보기
10/11

πŸ₯  Entity 볡합 μ‹λ³„μž

볡합 ν‚€(Composite Key)λŠ” 두 개 μ΄μƒμ˜ μ»¬λŸΌμ„ Key둜 μ§€μ •ν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€

  • ν•΄λ‹Ή μ΄λ―Έμ§€λŠ” 볡합 ν‚€λ₯Ό κ°€μ§€λŠ” λΆ€λͺ¨ 클래슀인 Parent ν΄λž˜μŠ€μ™€ λΆ€λͺ¨ ν΄λž˜μŠ€μ™€ 비식별 관계λ₯Ό λ§ΊλŠ” Child ν΄λž˜μŠ€μ— λŒ€ν•œ μ΄λ―Έμ§€μž…λ‹ˆλ‹€.

πŸ“Œ 비식별관계와 식별관계일 λ•Œ μ–΄λ–€ 차이가 μžˆλŠ”μ§€


➑️ μŠ€ν”„λ§ JPA λŠ” 볡합킀λ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•΄ 2가지 방식을 μ œκ³΅ν•©λ‹ˆλ‹€.

@Embeddable, @EmbeddedId

// 볡합킀λ₯Ό κ°€μ§€λŠ” λΆ€λͺ¨ 클래슀(Parent) 에 λŒ€ν•œ μ‹λ³„μž 클래슀

@Embeddable // μ‹λ³„μž ν΄λž˜μŠ€μ— κΌ­ μΆ”κ°€ν•΄μ•Όν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜
public class ParentId implements Serializable {

	@Column(name = "PARENT_ID1")
	private String id1; // parent.id1 맀핑
    @Column(name = "PARENT_ID2")
    private String id2; // parent.id2 맀핑


	// equals,hashCode κ΅¬ν˜„..
}

@Entity
public class Parent {
	
    @EmbeddedId 
    private ParentId id; // μ‹λ³„μž 클래슀λ₯Ό 직접 μ‚¬μš©
    
    Private String name;
    
    ...
}

@IdClass, @Id

// 볡합킀λ₯Ό κ°€μ§€λŠ” λΆ€λͺ¨ 클래슀(Parent) 에 λŒ€ν•œ μ‹λ³„μž 클래슀
public class ParentId implements Serializable {

	private String id1; // parent.id1 맀핑
    private String id2; // parent.id2 맀핑
    
   	public ParentId() {
    
  	}
    
    @Override
    public boolean equals(Object o) {..}
    
    @Override
   	public int hashCode() {..}
    
}

@Entity
@IdClass(ParentId.class) // μ‹λ³„μž 클래슀
public class Parent {

	@Id
    @Column(name = "PARENT_ID1")
    private String id1;
    
    @Id
    @Column(name = "PARENT_ID2")
    private String id2;
    
    private String name;
    
    ...
}


πŸ“Œ ν™œμš©ν•  수 μžˆλŠ” λ‹€λ₯Έ annotationsλ“€

@Enumerated

μ—΄κ±°ν˜• 값에 λŒ€μ‘λ˜λŠ” 숫자 κ°’/λ¬Έμžμ—΄ μ €μž₯

@Temporal

Date, Calendar, LocalDateTime λ“± λ‚ μ§œ/μ‹œκ°νƒ€μž… ν•„λ“œμ— λŒ€ν•œ mapping 방법 지정

@GeneratedValue

@Id field에 λŒ€μ‘λ˜λŠ” PK 컬럼 값을 μžλ™ 생성

@SecondaryTable


ν•˜λ‚˜μ˜ entity의 데이터듀을 두 개의 ν…Œμ΄λΈ”μ— mappingν•  λ•Œ μ‚¬μš©

  • Entity μ €μž₯ μ‹œ 일뢀 ν”Όλ“œλ“€μ„2μ°¨ ν…Œμ΄λΈ”μ— μ €μž₯(ν…Œμ΄λΈ” λ³„λ‘œ 각각 insertλ¬Έ μ‹€ν–‰)

πŸ₯  Mapping inheritance

@Inheritance (상속): 섀정을 톡해 3가지 mapping strategy μ‚¬μš© κ°€λŠ₯
1. Single-table: ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”

  • Discrimiator μ»¬λŸΌμ„ μ‚¬μš©ν•˜μ—¬ entity듀을 ꡬ뢄
  1. Joined table: μžμ‹ 관계 ν…Œμ΄λΈ”λ§Œ 생성 (user μƒλž΅)
  • λΆ€λͺ¨μ™€ μžμ‹ 사이에 one-to-one relationship μ •μ˜
  1. table per class: μ…‹ λ‹€ 각각 생성
  • λΆ€λͺ¨ ν΄λž˜μŠ€λ‘œλΆ€ν„° μžμ‹ 클래슀둜 μƒμ†λ˜λŠ” 데이터듀은 μžμ‹ ν…Œμ΄λΈ”μ—λ„ 쀑볡 μ €μž₯

✳️ Query API: JPQL μ„€λͺ…



πŸ«– 좜처: https://velog.io/@choidongkuen/JPA-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%B3%B5%ED%95%A9%ED%82%A4%EC%99%80-%EB%B9%84%EC%8B%9D%EB%B3%84%EC%8B%9D%EB%B3%84-%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91

0개의 λŒ“κΈ€