Bibi's DevLog ๐ค๐
[Spring Data JDBC, JPA] @Embeded๋?, @Embeded ์ฌ์ฉํ๊ธฐ ๋ณธ๋ฌธ
[Spring Data JDBC, JPA] @Embeded๋?, @Embeded ์ฌ์ฉํ๊ธฐ
๋น๋น bibi 2021. 4. 30. 19:43@Embeded
์ฐ๊ด ์๋ ์ปฌ๋ผ๋ค์ ๋ฌถ๋ ํ ์ด๋ธ์ ์๋ก ๋ง๋ค์ง ์๊ณ , @Embeded๋ฅผ ์ฌ์ฉํด ๋ง์น ํ๋์ ํ ์ด๋ธ์ ๋ง๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค!!
[JPA] @Embeded
, ์๋ฒ ๋๋ ํ์
https://velog.io/@conatuseus/JPA-%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C-%ED%83%80%EC%9E%85embedded-type-8ak3ygq8wo ์ ์ ์ค๋ช ๋์ด ์์ด ์์ฝ ์ ๋ฆฌ๋ง ํ์ต๋๋ค.๐โโ๏ธ
JPA์์ ์๋ฒ ๋๋ ํ์ (๋ณตํฉ ๊ฐ ํ์ )์ด๋ ์๋ก์ด ๊ฐ ํ์ ์ ์ง์ ์ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์๋ฒ ๋๋ ํ์ ์ญ์ int, String์ฒ๋ผ ๊ฐ ํ์ ์ด๋ค.
โ ์๋ฒ ๋๋ ํ์ ์ ์ฐ๋ ์ด์
โ ์์ธํ ๋ฐ์ดํฐ๋ค์ ๊ด๋ จ ์๋ ํ์ ์ผ๋ก ๋ฌถ์ด ๊ฐ์ฒด์งํฅ์ ์ด๊ณ ์์ง๋ ฅ ๋๊ฒ ๋ง๋ค๊ธฐ ์ํด.
์๋ฅผ ๋ค์ด..
ํ์ ์ํฐํฐ์ "์ด๋ฆ, ๊ทผ๋ฌด ์์์ผ, ๊ทผ๋ฌด ์ข ๋ฃ์ผ, ์ฃผ์ ์/๊ตฐ/๊ตฌ, ์ฃผ์ ๋ฒ์ง, ์ฃผ์ ์ฐํธ๋ฒํธ"์ ๊ฐ์ ์์ฑ๋ค์ด ์๋ค๋ฉด
์๋ก ๊ด๋ จ์๋ ์ ๋ณด๋ฅผ ๋ฌถ์ด "์ด๋ฆ, ๊ทผ๋ฌด๊ธฐ๊ฐ, ์ฃผ์"๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ๋ ๋ซ๋ค.
์ด ๋ ์์ธ ๋ฐ์ดํฐ๋ค์ ๋ฌถ๋ "๊ทผ๋ฌด๊ธฐ๊ฐ", "์ฃผ์"๋ฅผ ์๋ฒ ๋๋ ํ์ ์ผ๋ก ์ ์ธํด ์ฌ์ฉํ ์ ์๋ค.
โ ์๋ฒ ๋๋ ํ์ ์ ์ฅ์
- ์ฌ์ฌ์ฉ์ฑ
- ๋์ ์์ง๋
- ํด๋น ์๋ฒ ๋๋ ํ์ ๋ง ์ฌ์ฉํ๋ ๋ฉ์๋ ์์ฑ ๊ฐ๋ฅ
โ ์๋ฒ ๋๋ ํ์ ์ฌ์ฉ๋ฒ
@Embeddable
: ๊ฐ ํ์ ์ ์ ์ํ๋ ๊ณณ์ ํ์@Embedded
: ๊ฐ ํ์ ์ ์ฌ์ฉํ๋ ๊ณณ์ ํ์- ์๋ฒ ๋๋ ํ์ ์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ํ์
- ์๋ฒ ๋๋ ํ์ ์ ์ฌ์ฉํ๊ธฐ ์ ๊ณผ ํ์ ๋งตํํ๋ ํ ์ด๋ธ์ ๊ฐ๋ค - ์๋ฒ ๋๋ ํ์ ์ ์ํฐํฐ์ ๊ฐ์ผ ๋ฟ์
๊ธฐ์กด
Dish
์ ํฌํจ๋์ด ์๋ image ๊ด๋ จ ์์ฑ๋ค์ ๋ถ๋ฆฌํด ๊ด๋ฆฌํ๋, DBํ ์ด๋ธ์ ๋ฐ๋ก ๋ง๋ค๊ณ ์ถ์ง ์์ ๋, ์๋์ ๊ฐ์ด ์ฒ๋ฆฌํ๋ค.(๋ถ๋ฆฌํ ์์ฑ๋ค :
mainImage
,topImage
,thumbImages
,detailSection
)
Spring Data JDBC์์๋ ์๋์ ๊ฐ์ด Embeded๋ฅผ ์ฌ์ฉํ๋ค.
Dish.java
public class Dish {
@Id
private String id;
private String alt;
private String deliveryType;
private String title;
private String description;
private String normalPrice;
private String sellingPrice;
private String badge;
private Long categoryId;
private String deliveryInfo;
private String deliveryFee;
private int stock;
private String point;
@Embedded.Nullable
private Image image;
// ...
}
Image.java
public class Image {
private String mainImage;
private String topImage;
private String thumbImages;
private String detailSection;
public String getMainImage() {
return mainImage;
}
public String getTopImage() {
return topImage;
}
public String getThumbImages() {
return thumbImages;
}
public String getDetailSection() {
return detailSection;
}
}
Image
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋๋ @Embeded
์ฒ๋ฆฌํ ์์ ์ํฐํฐ์ธ Dish
๊ฐ์ฒด๋ฅผ ํ์ฉํ๋ค.
public static DishResponseDto of(Dish dish) {
Image image = dish.getImage();
return new DishResponseDto(dish.getId(), image.getMainImage(), dish.getAlt(),
dish.getDeliveryType(), dish.getTitle(), dish.getDescription(),
dish.getNormalPrice(), dish.getSellingPrice(), dish.getBadge());
}
JPA์์๋ ์๋์ ๊ฐ์ด Embeded๋ฅผ ์ฌ์ฉํ๋ค.
์๋ฒ ๋๋ ํ์ ์ฌ์ฉ ์
// ์๋ฒ ๋๋ ํ์
์ฌ์ฉํ์ง ์์์ ๋
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
// ๊ทผ๋ฌด ๊ธฐ๊ฐ
@Temporal(TemporalType.DATE)
Date startDate;
@Temporal(TemporalType.DATE)
Date endDate;
// ์ง ์ฃผ์ ํํ
private String city;
private String street;
private String zipcode;
// ...
}
์๋ฒ ๋๋ ํ์ ์ฌ์ฉ ํ
@Entity
public class Member {
@Id @GeneratedVAlue
private Long id;
private String name;
@Embedded
private Period workPeriod; // ๊ทผ๋ฌด ๊ธฐ๊ฐ
@Embedded
private Address homeAddress; // ์ง ์ฃผ์
}
@Embeddable
public class Peroid {
@Temporal(TemporalType.DATE)
Date startDate;
@Temporal(TemporalType/Date)
Date endDate;
// ...
public boolean isWork (Date date) {
// .. ๊ฐ ํ์
์ ์ํ ๋ฉ์๋๋ฅผ ์ ์ํ ์ ์๋ค
}
}
@Embeddable
public class Address {
@Column(name="city") // ๋งคํํ ์ปฌ๋ผ ์ ์ ๊ฐ๋ฅ
private String city;
private String street;
private String zipcode;
// ...
}
โ ์ํฐํฐ์ ์๋ฒ ๋๋ ํ์ ์ ๊ด๊ณ
- UML : ์ปดํฌ์ง์ (composition, ๊ตฌ์ฑ) ๊ด๊ณ
- ํ์ด๋ฒ๋ค์ดํธ : ์ปดํฌ๋ํธ(components, ๊ตฌ์ฑ์์) ๊ด๊ณ
์๋๋ ์ปดํฌ์ง์
๊ด๊ณ UML ๊ทธ๋ฆผ.
'๐ฅ BE ๋ฐฑ์๋ > Spring ์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SpringDataJDBC] Map์ผ๋ก 1:N ๊ด๊ณ ๋งตํํ๊ธฐ (0) | 2021.04.30 |
---|---|
AWS EC2 (Ubuntu) ์๋ฒ์ ์คํ๋ง ์ฑ ๋ฐฐํฌ ๊ณผ์ ์ ๋ฆฌ (0) | 2021.04.30 |
[Spring] HTTP method - PUT (0) | 2021.04.06 |
[JPA] CrudRepository์ ๋ฉ์๋ & JpaRepository์ CrudRepository์ ์ฐจ์ด (0) | 2021.03.20 |
@RequestMapping ์ผ๋ก ์ค๋ณตURL ์ ๊ฑฐํ๊ธฐ (0) | 2021.03.17 |