2014-09-02 5 views
2

최대 절전 모드 및 언버를 사용하고 있습니다.Hibernate는 양측 감사가 아닌 일대일 관계를 유지합니다.

는 I 2 엔티티 A 및 B (A)가 메인 엔티티와 B 그들은 일대일 및 양방향성 A.

의 서브 섹션이있다.

  1. 저장 A, 모두 A와 B가 수정 : 그들 중

    모두 내가를 저장할 때 3 시나리오는 일이있다, @Audited된다. 두 버전 모두 새로운 버전 번호가 공유됩니다.

  2. A를 저장하면 A 만 수정됩니다. A에 대한 새 개정판이 있습니다.
  3. A를 저장하면 B 만 수정됩니다. B에 대한 새로운 개정판이있을 것입니다. (나는 이것을 원하지 않습니다.)

나는 항상 업데이트하기 위해 엔티티 A와 캐스케이드 B를 저장합니다. 시나리오 3에서 엔티티 A에 대한 개정을 어떻게 가질 수 있습니까? 많은 감사합니다 !!!

데이터 스키마, 내 스키마는이 게시물의 대답에 따라 구성됩니다 내 데이터 스키마 :

@Entity 
@Audited 
public class B implements Serializable { 

    .... 

    //bi-directional one-to-one association to A 
    @MapsId 
    @OneToOne(mappedBy="b", cascade=CascadeType.ALL) 
    @JoinColumn(name="A_ID") 
    private A a; 

    } 

@Entity 
@Audited 
@Table(name="A") 
public class A implements Serializable { 

... 

    //bi-directional one-to-one association to B 
    @OneToOne(cascade=CascadeType.ALL) 
    @PrimaryKeyJoinColumn 
    private B b; 

나는 계속 저장하면 엔티티 A (A는 수정되지 않습니다와 B가 수정),

Hibernate generated sql 

Hibernate: update A set ... 

Hibernate: update B set ... 

Hibernate: update C set ... 

Hibernate: insert into RevEntity (CREATE_DATE, timestamp, username, id) values (?, ?, ?, ?) 

Hibernate: insert into B_AUD ... 
+0

질문을 편집하여 실제 데이터 스키마를 게시 할 수 있습니까? 관련 코드는 SO 회원이 귀하의 질문에 더 잘 답변 할 수 있도록 도와줍니다. 감사합니다. – m4rtin

답변

0

불행하게도, 당신이 직접 B을 수정할 때 또한 A을 수정 Envers을 강제 할 수있는 방법이 없다. 비즈니스/지속성 코드에서 해당 요구 사항을 트리거하여 A의 값을 변경해야 사용 사례의 개정판에 포함될 수 있습니다.

관련 문제