Hibernate Envers : - 컬렉션의 객체의 추가 멤버 변수는 또한 메인 클래스의 감사 테이블에 항목을 생성합니다.

StackOverflow https://stackoverflow.com//questions/25057367

  •  21-12-2019
  •  | 
  •  

문제

둘 다 감사 된 2 개의 클래스가 있습니다.

@Entity
@Audited
@Table(name = "PLACE")
public class Place {
private long woeId;
private Set<PlaceName> placeNames;

@OneToMany(mappedBy = "place", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@Fetch(FetchMode.JOIN)
public Set<PlaceName> getPlaceNames() {
    return placeNames;
}

....
}


@Entity
@Audited
@Table(name = "PLACE_NAME")
@Check(constraints = "NAME_TYPE in ('N', 'V', 'A', 'S', 'P', 'Q', 'A1', 'A2', 'A3', 'FA', 'FI', 'IA', 'IC', 'I2', 'I3', 'NA', 'P1', 'P2')")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class PlaceName implements Serializable {
    private long id;
    private String name;
    private Place place;

    @Id
    @SequenceGenerator(name = "SEQ_STORE", sequenceName = "PLACE_NAME_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STORE")
    @Column(name = "NAME_ID", columnDefinition = "NUMBER(12, 0)", nullable = false)
    public long getId() {
        return id;
    }

    /**
     * @param id
     *            the id to set
     */
    public void setId(long id) {
        this.id = id;
    }

    @Column(name = "NAME", columnDefinition = "NVARCHAR2(512)", nullable = false)
    public String getName() {
        return name;
    }

    /**
     * @param name
     *            the name of the {@link Place}
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the {@link Place} this name is associated with
     */
    @ManyToOne
    @JoinColumn(name = "WOE_ID")
    public Place getPlace() {
        return place;
    }

    /**
     * @param place
     *            the {@link Place} this name is associated with
     */
    public void setPlace(Place place) {
        this.place = place;
    }

}
.

이므로

를 사용하여 place_name 테이블에 place name이 추가되면

Place place = session.get(Place.class, new Integer(1));
PlaceName pn = new PlaceName();
pn.setName("ABC");
pn.setPlace(place);
.

그런 다음 place_name_aud 테이블에서 항목이 삽입되지만 place_aud 테이블에 항목이 추가됩니까?그 것의 이유는 무엇입니까?

도움이 되었습니까?

해결책

Place를 보면 컬렉션이 변경 되었기 때문입니다.이는 org.hibernate.envers.revision_on_collection_change 구성 속성을 통해 구성 할 수 있습니다. 문서 를 참조하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top