사용자 도구

사이트 도구


java:jpa:map

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
java:jpa:map [2014/05/22 17:56]
kwon37xi 새로 만듦
java:jpa:map [2019/04/22 14:37] (현재)
kwon37xi
줄 1: 줄 1:
-====== Jpa Map ======+====== JPA Map ======
   * Entity를 Map으로 가질 수도 있고, 일반 값 객체를 Map으로 가질 수도 있다.   * Entity를 Map으로 가질 수도 있고, 일반 값 객체를 Map으로 가질 수도 있다.
  
줄 6: 줄 6:
   * 예) Parent -> Child 맵<code java>   * 예) Parent -> Child 맵<code java>
 public class Parent { public class Parent {
 +  // ....
   @OneToMany(cascade = {CascadeType.ALL})   @OneToMany(cascade = {CascadeType.ALL})
   @JoinColumn(name = "parent_id", nullable = false)   @JoinColumn(name = "parent_id", nullable = false)
줄 11: 줄 12:
   private Map<String, Child> children; // children 테이블에 parent_id, map_key 컬럼 존재   private Map<String, Child> children; // children 테이블에 parent_id, map_key 컬럼 존재
 } }
-이 상황에서 Parent 객체를 children 값까지 다 채워서 persist 하면 insert 후에 update 동반 발생+// 이 상황에서 Parent 객체를 children 값까지 다 채워서 persist 하면 insert 후에 update 동반 발생 
 +// 이미 insert 상황에서 children 테이블의 parent_id, map_key의 채워진 상황. 
 + 
 +update children set parent_id=?, map_key=? where child_id=?
 </code> </code>
 +  * Parent의 ''@JoinColumn'', ''@MapKeyColumn''을 ''updatable=false''로 지정하면 업데이트 안 일어남<code java>
 +  @OneToMany(cascade = {CascadeType.ALL})
 +  @JoinColumn(name = "parent_id", nullable = false, updatable=false)
 +  @MapKeyColumn(name = "map_key", updatable=false)
 +  private Map<String, Child> children;
 +  
 +// 이후 update 안 일어남.
 +</code>
 +  * **근본적으로 Map의 Key가 Entity에 직접 들어가는 상황이라면 Entity Map 보다는 Embeddable Map이 맞는 것 같다**.
 +
 +===== 참조 =====
 +  * [[https://baeldung.com/hibernate-persisting-maps|Persisting Maps with Hibernate | Baeldung]]
 +
  
java/jpa/map.1400748984.txt.gz · 마지막으로 수정됨: 2014/05/22 17:56 저자 kwon37xi