JPA limitation and REST association - TheOpenCloudEngine/uEngine-cloud GitHub Wiki
JPA relation annotations and search method generation ์์ @ManyToOne
๊ณผ @OneToMany
์ ์ฌ์ฉ๋ฒ์ ์ตํ๋ค.
๊ทธ๋ฌ๋ ์์ ๋ฐฉ์์ Monolithic ๋ฐฉ์์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ณ , spring-data-rest ๋ฐฉ์์ผ๋ก Service๊ฐ ์ชผ๊ฐ์ง๋ฉด
HATEOAS ๋ ๋์ด์ ์ด Link ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง์ง ๋ชปํ๊ธฐ์, HATEOAS ๋ฅผ ์ง์ ์จ์ ๊ตฌํ์ ํด์ผํ๋ค.
TIP : ์ฌ๊ธฐ์ ์ฌ์ฉํ๋ ์์ ๋
https://github.com/uengine-oss/msa-tutorial-class-management-monolith
https://github.com/uengine-oss/msa-tutorial-class-management-msa
์ฌ๊ธฐ ๋๊ฐ์ ํ๋ก์ ํธ์ ๋ชจ๋ ๋์์๋ค.
๋ค์ํ๋ฒ Clazz.java๋ฅผ ์ดํด๋ณด์.
public class Clazz {
@RestAssociation(/*serviceId = "course", */path = "/courses/{courseId}", joinColumn = "courseId")
//@ManyToOne @JoinColumn(name="COURSE_ID")
Course course;
/*** dummy ***/
Long courseId;
public Long getCourseId() { return courseId;}
public void setCourseId(Long courseId) {this.courseId = courseId;}
}
microservice๋ก ์ ํ์ ๊ฐ์์ ์๋น์ค๋ ์๋ก ๋ค๋ฅธ DB ๋ฅผ ๊ฐ์ง์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ ์๋น์ค๋ ์๋ก ๋ค๋ฅธ process ์์ ๊ตฌ๋์ด ๋๊ธฐ์, ํ๋์ transaction scope ์์ ์๋ค์ด ๊ฐ์ง๋ค.
ํ์ด ๋งํ์๋ฉด Clazz ์
์ฅ์์ Course ์ courseId ๋ฅผ @ManyToOne
๋ฐฉ์์ผ๋ก ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค.
@RestAssociation
์ ์ฌ์ฉํ์ฌ path์ joinColumn์ ์ฃผ๊ณ dummy๋ก courseId ๋ฅผ ์ค์ ํ๋ค.
์ด๋ ๊ฒ ์ ์ฉ์ ํ์์๋, ์๋์ ๊ฐ์ด ์๋ก๋ค๋ฅธ ์๋น์ค๋ผ๋ฆฌ HATEOAS link ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
http localhost:8080/clazzes course="http://localhost:8080/courses/1"
HATEOAS API๋ฅผ ์ง์ ์ฐ๋ ๋ฐฉ์์ ๊ฐ ์ํฉ๋ณ๋ก ๋งค๋ฒ ๊ตฌํ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ด๋ ต๋ค.
์ด์ objectpartners๋ผ๋ ๋์์ธ ํจํด์ ์ฐ๊ตฌํ๋ ํ์ฌ์์ HATEOAS annotation ์ ์ง์ ๋ง๋ค์ด์ ์ฐ๋ ํจํด์ ๋ง๋ค์๊ณ ,
ํด๋น ํจํด์ ์ ์ฉํ์ฌ metaworks4์์ @RestAssociation
์ ๊ตฌํํด ๋์๋ค.
์ฐธ๊ณ
https://github.com/uengine-oss/metaworks4/blob/master/src/main/java/org/metaworks/springboot/configuration/Metaworks4WebConfig.java
https://objectpartners.com/2016/02/18/mapping-jpa-entities-to-external-rest-resources-in-spring-data-rest/