Tôi sử dụng Hibernate Envers để kiểm tra các thực thể của mình.Làm thế nào để không kiểm toán một bảng tham gia và các thực thể liên quan bằng cách sử dụng Hibernate Envers?
Tôi có một thực thể được kiểm tra, Foo
, có một thuộc tính là List<Bar>
. Tuy nhiên, tôi không muốn kiểm tra các đối tượng Bar
. Vì vậy, tôi đã viết rằng:
@Entity
@Audited
public class Foo {
@JoinTable(name = "T_FOO_BAR", joinColumns = @JoinColumn(name = "FOO_ID"), inverseJoinColumns = @JoinColumn(name = "BAR_ID"))
@ManyToMany(cascade = PERSIST)
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
public List<Bar> getBars() {
return bars;
}
}
Bây giờ, tôi muốn lấy một phiên bản của Foo
:
AuditReader reader = AuditReaderFactory.get(getEntityManager());
Foo revision = (Foo) reader.createQuery().forEntitiesAtRevision(Foo.class, 42).getSingleResult();
Thật không may, khi tôi muốn lấy tất cả các dữ liệu (tức là khi nó tải lười biếng các bars
) , tôi nhận được lỗi ORA-00942: table or view does not exist
, vì nó đã cố gắng để truy vấn:
select ... from T_FOO_BAR_AUD x, T_BAR y where ...
tôi dù rằng việc sử dụng @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
, Hibernate Envers sẽ tiếp tục liên kết s với các mục Bar
của thực thể hiện tại.
Vậy làm cách nào để giải quyết sự cố của mình mà không phải kiểm tra rõ ràng các bảng T_BAR
và T_FOO_BAR
(bảng kết nối)? Nói cách khác, khi tôi lấy danh sách bars
từ thực thể sửa đổi của mình, tôi nhận được danh sách bars
từ thực thể hiện tại của tôi (vì các liên kết giữa Foo
và Bar
không được kiểm tra).
Cảm ơn.