์ถ์ฒ : ๋ด์ผ๋ฐฐ์์บ ํ
ํ ์ด๋ธ ๋งคํ ๊ธฐ๋ฅ์ผ๋ก RDB๋ฅผ ๊ฐ์ฒด๋ก ์ฎ๊ธฐ๊ธฐ
1. @Entity
๊ฐ์ฒด ๊ด์ ์์์ ์ด๋ฆ, ํด๋์ค ๋ช ์ด ๋ํดํธ, ์ํฐํฐ์ ์ด๋ฆ์ JQL์์ ์ฐ์ธ๋ค
JQL : Entity ๋ช ์ผ๋ก ์ฟผ๋ฆฌ์งค ๋ ์ฐ์ด๋ ์ธ์ด(ex : JPQL, QueryDsl)
2. @Table
RDB์ ํ ์ด๋ธ ์ด๋ฆ, @Entity์ ์ด๋ฆ์ด ํ ์ด๋ธ์ ๊ธฐ๋ณธ๊ฐ ~ ์ํฐํฐ์ ํ ์ด๋ธ์ ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ์ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
ํ ์ด๋ธ์ ์ด๋ฆ์ SQL์์ ์ฐ์ธ๋ค ~ SQL : Table ๋ช ์ผ๋ก ์ฟผ๋ฆฌ์งค ๋ ์ฐ์ด๋ ์ธ์ด(ex : JDBC, SQL Mapper)
3. @Id
์ํฐํฐ์ ์ฃผ ํค๋ฅผ ๋งคํํ ๋ ์ฌ์ฉ, ์๋ฐ์ ๋ชจ๋ ์์ ํ์ ๊ณผ ๊ทธ ๋ํผ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค
4. @GeneratedValue
์ฃผ ํค์ ์์ฑ ๋ฐฉ๋ฒ์ ๋งคํ, ์์ฑ ์ ๋ต๊ณผ ์์ฑ๊ธฐ๋ฅผ ์ค์ ํ ์ ์๋ค
5. @Column
Raw JPA ํ๋ ํ์ ๋งคํ ๊ธฐ๋ฅ
Value ํ์ ์ข ๋ฅ
๊ธฐ๋ณธํ์
1) @Column : ์ฌ์ด์ฆ ์ ํ ์ฉ๋๋ก ์ฌ์ฉ, @Entity๊ฐ ์์ ์ ์๋์ผ๋ก ํ๋์ ๋ถ๋๋ค
2) @Enumerated : Enum ๋งคํ์ฉ๋๋ก ์ฐ์ด๋ฉฐ ์ค๋ฌด : @Enumerated(EnumType.String)๋ก ์ฌ์ฉ ๊ถ์ฅ
~ Ordinal์ ์์ ๋ณ๊ฒฝ ์ ๊ผฌ์ผ ์ ์๋ค
Composite Value ํ์
@Embeddable
@Embedded
@AttributeOverrides
@AttributeOverride
์ฐธ๊ณ
https://klyhyeon.tistory.com/272
Collection Value ํ์
๊ธฐ๋ณธ ํ์ ์ฝ๋ ์
์ปดํฌ์ง ํ์ ์ฝ๋ ์
RawJPA ์ฐ๊ด๊ด๊ณ ๋งคํ๊ธฐ๋ฅ
@OneToOne
๋จ๋ฐฉํฅ์ผ๋ก ์ฐ๋ฉด ๋ฌธ์ ๋ฐ์๊ฐ๋ฅ
FetchType = LAZY ๊ธฐ๋ณธ์ค์
์์ฑ
mappedBy : ์ฐ๊ด๊ด๊ณ ์ฃผ์ธ ํ๋ ์ ํ
fetch : ๊ธ๋ก๋ฒ ํ์น์ ๋ต ์ค์
cascade : ์์์ฑ ์ ์ด ๊ธฐ๋ฅ ์ฌ์ฉ
targetEntity : ์ฐ๊ด๋ ์ํฐํฐ์ ํ์ ์ ๋ณด ์ค์
@ManyToOne
์์ฑ
optional(๊ธฐ๋ณธ๊ฐ = true) : false ์ค์ ์ ์ฐ๊ด๋ ์ํฐํฐ๊ฐ ๋ฐ๋์ ์์ด์ผ ํ๋ค
fetch : ๊ธฐ๋ณธ EAGER๋ก ๋์ด์์ผ๋ ์ค๋ฌด LAZY ์ถ์ฒ
cascade : ์์์ฑ ์ ์ด ๊ธฐ๋ฅ ์ฌ์ฉ
targetEntity : ์ฐ๊ด๋ ์ํฐํฐ์ ํ์ ์ ๋ณด ์ค์ (targetEntity = Member.class ์์ผ๋ก ์ฌ์ฉ)
@JoinColumn
์ธ๋ ํค ๋งคํ ์ ์ฌ์ฉ (Join ์ ์์ฒญํ๊ธฐ ์ํ ๋งคํ์ ๋ณด)
@ManyToOne ์ด๋ ธํ ์ด์ ๊ณผ ์ฃผ๋ก ํจ๊ป ์ฐ์ธ๋ค. (์กฐ์ธ๋์ ์ปฌ๋ผ ์ง์ ๊ธฐ๋ฅ์ ์์ธ๊ฑฐ๋ฉด ์๋ตํด๋ ๋จ)
name ์์ฑ์ ๋งคํํ ์ธ๋ํค์ ์ด๋ฆ
์ด๋ ธํ ์ด์ ์ ์๋ตํด๋ ์ธ๋ ํค๊ฐ ์์ฑ
์๋ต ์ ์ธ๋ํค์ ์ด๋ฆ์ด ๊ธฐ๋ณธ ์ ๋ต์ ํ์ฉํ์ฌ ์์ฑ
์์ฑ
name : ๋งคํํ ์ธ๋ ํค์ ์ด๋ฆ
referencedColumnName : ์ธ๋ ํค๊ฐ ์ฐธ์กฐํ๋ ๋์ ํ ์ด๋ธ์ ์ปฌ๋ผ๋ช
foreignKey : ์ธ๋ ํค ์ ์ฝ์กฐ๊ฑด ์ง์ (ํ ์ด๋ธ ์์ฑ ์์๋ง ์ ์ฉ๋จ)
unique/nullable/insertable/updateable/columnDefinition/table : @Column์ ์์ฑ๊ณผ ๊ฐ์
@ManyToMany
๋ค๋๋ค ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋งคํ ์ ๋ณด (N:M)
๋ค๋๋ค ์ค์ ์ ํ๊ฒ๋๋ฉด ์ค๊ฐ ๋งคํํ ์ด๋ธ(JoinTable)์ด ์๋ ์์ฑ
์ค๊ฐ ๋งคํ ํ ์ด๋ธ์ JPA์์์ ์จ๊ฒจ์ ธ์(Entity ์ ์ ์์ด) ๊ด๋ฆฌ
-> ๋งคํ ํ ์ด๋ธ ๊ด๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ์ฌ์ ์ค๋ฌด์์๋ ์ ์ฌ์ฉํ์ง ์๋ ๊ธฐ๋ฅ
-> ์ค๋ฌด์์๋ ๋งคํ ํ ์ด๋ธ์ ์๋์ ๊ฐ์ ํํ๋ก ์ง์ ์ ์
TableA(@OneToMany) > MappingTable(@ManyToOne,@ManyToOne) > TableB(@OneToMany)
ex) User : ์ผ๋๋ค -> UserChannel : ๋ค๋์ผ, ๋ค๋์ผ -> Channel : ์ผ๋๋ค
๋ณตํฉ ํค ์ฌ์ฉํ๊ธฐ
์ ์ธ ๋ฐฉ๋ฒ
- @IdClass๋ฅผ ํ์ฉํ๋ ๋ณตํฉํค๋ ๋ณตํฉํค๋ฅผ ์ฌ์ฉํ ์ํฐํฐ ์์ @IdClass(์๋ณ์ ํด๋์ค) ์ฌ์ฉ
- @EmbeddedId๋ฅผ ํ์ฉํ๋ ๋ณตํฉํค๋ ๋ณตํฉํค ์์ @EmbeddedId ์ฌ์ฉ
RawJPA ๊ธฐํ๊ธฐ๋ฅ
Cascade
์ฌ์ฉ ์์น
์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ด ์๋ ์ํฐํฐ : ๋ถ๋ชจ ์ํฐํฐ
์ฌ์ฉ ์กฐ๊ฑด
- ์์ชฝ ์ํฐํฐ์ ๋ผ์ดํ์ฌ์ดํด์ด ๋์ผํ๊ฑฐ๋ ๋น์ทํด์ผ ํ๋ค ex) ๊ฒ์๊ธ๊ณผ ๋๊ธ : ํจ๊ป ์ญ์ ๋์ด์ผ ํ๋ค
- ๋์ ์ํฐํฐ๋ก์ ์์์ฑ ์ ์ด๋ ํ์ฌ ์ํฐํฐ์์๋ง ์ ์ด๋์ด์ผ ํ๋ค(๋ค๋ฅธ ๊ณณ์์ ๋ ๊ฑธ๋ฉด ์๋๋ค)
ex) ๊ฒ์๊ธ์ด ์๋ ๋ค๋ฅธ ๊ณณ์์ ๋๊ธ์ ์์์ฑ ์ ์ด๋ฅผ ํ๋ฉด ์๋๋ค
์ต์ ์ข ๋ฅ
ALL : ์ ์ฒด ์ํ ์ ์ด
PERSIST : ์ ์ฅ ์ํ ์ ์ด
REMOVE : ์ญ์ ์ํ ์ ์ด
MERGE : ์ ๋ฐ์ดํธ ์ํ ์ ์ด
REFRESH : ๊ฐฑ์ ์ํ ์ ์ด
DETACH : ๋น์์์ฑ ์ํ ์ ์ด
OrphanRemoval
์ฌ์ฉ ์์น
๋ถ๋ชจ ์ํฐํฐ
์ฌ์ฉ๋ฒ
Cascade.REMOVE์ ์ ์ฌํ๊ฒ ์ญ์ ์ ํ ์ ์ฌ์ฉ
https://cdaosldk.tistory.com/126
* Cascade.REMOVE์์ ์ฐจ์ด์
OrphanRemoval์ ๊ฒฝ์ฐ ๋ถ๋ชจ ์ํฐํฐ์ ์์ ์ํฐํฐ ๋ฆฌ์คํธ์์ ์์๋ฅผ ์ ๊ฑฐํ๊ธฐ๋ง ํด๋ ๊ทธ ์์ ์ํฐํฐ๊ฐ ์ ๊ฑฐ๋๋ค
-> Casecade.REMOVE์ ๊ธฐ๋ฅ์ ํฌํจํด ๋ ์ธ๋ฐํ ์กฐ์ ์ด ๊ฐ๋ฅํ๋ค
์์์ฑ ์ ์ด ์ต๊ฐ ์กฐํฉ : OrphanRemoval = true, Cascade.ALL
~ ์์ ์ํฐํฐ์ ๋ผ์ดํ์ฌ์ดํด์ด ๋ถ๋ชจ ์ํฐํฐ์ ์์ ํ ๋์ผํด์ง๋ฉฐ, ์ง์ ์์ ์ํฐํฐ์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ ์ ์์ผ๋ฏ๋ก ์์ ์ํฐํฐ์ Repository๊ฐ ํ์์๊ฒ ๋๋ค ~ ์ค๋ฌด : ๋งคํ ํ ์ด๋ธ(๋ค๋๋ค ๊ด๊ณ)์์ ๋ง์ด ์ฐ์ธ๋ค
Fetch
์ฌ์ฉ ์์น
์ํฐํฐ์ FetchType์ผ๋ก ์ค์ ํ ์ ์๋ค :
@ElementCollection, @ManyToMany, @OneToMany, @ManyToOne, @OneToOne
์ฌ์ฉ๋ฒ
๊ธฐ๋ณธ์ ์ผ๋ก LAZY๋ฅผ ์ค์ ํ ๋ค ํ์ ์ fetch join์ ์ํ
ํญ์ ๊ฐ์ด ์ฐ์ด๋ ์ฐ๊ด๊ด๊ณ์ผ ๊ฒฝ์ฐ์๋ง EAGER๋ฅผ ์ค์
์ต์
EAGER : ์ฆ์ ๋ก๋ฉ (๋ถ๋ชจ ์กฐํ์ ์์๋ ๊ฐ์ด ์กฐํ)
LAZY : ์ง์ฐ ๋ก๋ฉ (์์์ ํ์ํ ๋ ๋ฐ๋ก ์กฐํ)
'Spring๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SpringData JPA ํ์ด์ง๊ณผ ์ ๋ ฌ (0) | 2023.02.03 |
---|---|
SpringData ๊ตฌ์กฐ ๋ฐ JpaRepository ์๋ฆฌ (0) | 2023.02.03 |
ORM์ ํ์ ๋ฐฐ๊ฒฝ(JDBC, Querry Mapper) + ์ฑ์ฅ ๊ณผ์ (0) | 2023.02.01 |
JPA ์ฐ๊ด๊ด๊ณ ๋งคํ ์๋ฌ ์ก๊ธฐ(1) (0) | 2023.01.30 |
ํ ์คํธ ์ฝ๋(2) (0) | 2023.01.26 |