java - tutorial - what is jpa




양방향 ManyToMany 저장 (4)

다음과 같은 방식으로 주석이 달린 두 개의 엔티티 클래스가 있습니다.

@Entity
class A {
   @ManyToMany(mappedBy="A", cascade=CascadeType.ALL)
   private List<B> b;
 ..
}

@Entity
class B {
   @ManyToMany(cascade=CascadeType.ALL)
   private List<A> a;
 ..
}

클래스 'B'의 인스턴스를 저장하면 관계가 데이터베이스에 저장되고 클래스 'A'의 getter는 B의 올바른 하위 집합을 반환합니다. 그러나 'A'의 Bs 목록을 변경하면 변경 사항이 데이터베이스에 저장되지 않습니다.

내 질문은 두 클래스의 변경 사항이 다른 클래스에 "계단식"이되도록 어떻게 만들 수 있습니까?

편집 : mappedBy 매개 변수를 제거하고 JoinTable (및 열)을 정의하는 다양한 변형을 시도했지만 올바른 조합을 찾을 수 없었습니다.


응용 프로그램이 관계의 한 쪽을 업데이트 할 때 관계가 양방향이므로 다른 쪽도 업데이트되고 동기화되어야합니다. JPA에서는 일반적으로 Java와 마찬가지로 관계를 유지 관리하는 것이 애플리케이션 또는 객체 모델의 책임입니다. 응용 프로그램이 관계의 한쪽에 추가되면 다른쪽에 추가해야합니다.

이는 관계의 양면을 처리하는 객체 모델에서 메소드를 추가하거나 설정하여 해결할 수 있으므로 응용 프로그램 코드는 관계에 대해 신경 쓸 필요가 없습니다. 이 작업을 수행하는 방법은 두 가지가 있습니다. 관계 유지 코드를 관계의 한쪽에만 추가하고 한 쪽에서 설정자를 사용하거나 (다른 쪽을 보호하는 등) 양면에 추가 할 수 있습니다. 무한 루프를 피하십시오.

출처 : OneToMany#Getters_and_Setters


mappedBy 매개 변수를 클래스 B의 A 필드에 추가하려고 시도 했습니까?

@Entity
class B {
   @ManyToMany(cascade=CascadeType.ALL, mappedBy = "b")
   private List<A> a;
 ..
}

어쩌면 A_M의 대답에 약간의 실수가있을 수 있습니다. 내 의견으로는 :

   @Entity
   class B { 
   @ManyToMany 
   @JoinTable (
       name="A_B",
       joinColumns = {@JoinColumn(name="B_ID")},
       inverseJoinColumns = {@JoinColumn(name="A_ID")}
   )
   private List a; 
   .. 
}

역 결합 열을 지정 했습니까?

@Entity
class A {
   @ManyToMany(mappedBy="A", cascade=CascadeType.ALL)
   private List <B> b;
   ..
}

@Entity 
class B { 
   @ManyToMany 
   @JoinTable (
       name="A_B",
       joinColumns = {@JoinColumn(name="A_ID")},
       inverseJoinColumns = {@JoinColumn(name="B_ID")}
   )
   private List<A> a; 
   .. 
} 

A_ID와 B_ID 열을 가진 A_B라는 조인 테이블을 가정하고 있습니다.







jpa