====== JPA 관계 ====== * [[java:jpa:one-to-one|JPA One-To-One]] * [[java:jpa:map|JPA Map]] ===== 관계 ==== * [[https://www.baeldung.com/jpa-join-column|@JoinColumn Annotation Explained | Baeldung]] * ''@JoinColumns''로 복합키 조인도 처리 가능 ===== to-many 주의 ===== * ''to-many'' 관계에 대해서 join fetch 하지 말 것. * [[java:hibernate:gotchas|Hibernate/JPA Gotchas]] 참고. ===== Entity Graph / JPA 2.1 ===== * [[java:jpa:entitygraph|JPA Named Entity Graph]] ===== Cascade ===== ==== Casecade.REMOVE 함부로 사용하지 말 것 ==== * [[https://www.youtube.com/watch?v=GFy8dJNCRcY|Why you should avoid CascadeType.REMOVE for to-many associations and what to do instead - YouTube]] * 부모 삭제시 자식을 함께 삭제하는데 in 구문으로 삭제하지 않고 ''DELETE'' 를 자식의 갯수만큼 따로 날린다. * Many-To-Many 관계의 경우 상호 삭제가 발생하여 원치 않는 데이터까지 모두 삭제 될 수 있다. > 작가대 책의 관계가 Many-To-Many(공저자일 경우)가 발생하는 데 이 때 작가1을 삭제하면 공저자가 있는 책까지 모두 삭제하고 상호 ''Cascade.REMOVE''가 걸려있을 경우에는 관계의 연쇄로 인해 작가1과 공저한 책과 공저자 자신, 공저자의 다른 책들까지 연쇄를 삭제될 수 있다. ==== @JoinFormula ==== * 관계가 맺어져 있지 않을 경우 ''null''값을 저장해야 하지만 Legacy DB의 경우 ''0'' 이나 기타 다른 값을 저장하는 경우가 있다. * [[https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/annotations/JoinFormula.html|@JoinFormula]] @JoinFormula(value="CASE the0isNullColumn WHEN 0 THEN NULL ELSE the0isNullColumn END") * [[https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/annotations/JoinColumnOrFormula.html|@JoinColumnOrFormula]] * [[https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/annotations/JoinColumnsOrFormulas.html|@JoinColumnsOrFormulas]] * [[https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/annotations/NotFound|@NotFound]]도 사용가능하지만 이 경우 잘못된 값이 들어온 경우와 ''null''을 나타내는 값이 들어온 경우를 구분할 수 없다. @NotFound(action = NotFoundAction.IGNORE) === @JoinFormula 참고 === * [[https://stackoverflow.com/a/30073698/1051402|Hibernate handle long 0 value instead of NULL in ManyToOne relations]] * [[https://vladmihalcea.com/tag/joinformula/|@JoinFormula Archives - Vlad Mihalcea]] * [[https://vladmihalcea.com/how-to-customize-an-entity-association-join-on-clause-with-hibernate-joinformula/|How to customize an entity association JOIN ON clause with Hibernate @JoinFormula - Vlad Mihalcea]] * [[https://vladmihalcea.com/how-to-map-the-latest-child-of-a-parent-entity-using-hibernate-joinformula/#more-6983|How to map the latest child of a parent entity using Hibernate @JoinFormula - Vlad Mihalcea]] === 참조 === * [[https://www.baeldung.com/jpa-join-types|JPA Join Types | Baeldung]]