現在、統合用のアプリケーションで envers ライブラリを試しています。getRevisions を実行するたびに、ルート エンティティのリビジョンのみを取得します。
ただし、Envers は同封されたコレクション内のエンティティのリビジョンも取得できると期待しています。いくつかのカスタム クエリを試しましたが、結合などを介して 2 つを組み合わせることができません。
エンティティは次のとおりです。
エンティティ: フォーム
@Audited
@Entity(name = "Form")
@DisplayProperty(displayProperty1 = "name")
public class Form extends IdentityIdEntity<Integer> {
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@MapKey(name = "id")
private Map<Integer, FormElement> elements = new HashMap<Integer, FormElement>();
}
エンティティ: FormElement
@Audited
@Entity(name = "FormElement")
@Inheritance(strategy = InheritanceType.JOINED)
@DisplayProperty(displayProperty1 = "name")
public abstract class FormElement extends TranslatableIdentityIdEntity<Integer, FormElementTranslation> implements
Comparable<FormElement> {
@Column(length = 50, nullable = false)
private String name;
}
サービス: FormVersioningService
public List<Number> findVersionsOfForm(Form form) {
AuditReader auditReader = AuditReaderFactory.get(sessionFactory.getCurrentSession());
logger.info(auditReader.getRevisions(Form.class, form.getId()).toString());
List resultList = auditReader.createQuery().forRevisionsOfEntity(FormElement.class, false, true)
.addProjection(AuditEntity.revisionNumber()).add(AuditEntity.property("form_id").eq(form.getId()))
.getResultList();
logger.info(resultList);
return null;
}
最初のログは次を返します。
情報: [16、19、20、24]
2 番目の戻り値:
情報: [24、25]
しかし、私は次の結果を得たいです:
情報: [16、19、20、24、25]
Hibernate 3.5.6 を使用していますが、現時点では新しいバージョンにアップグレードできないため、このバージョン内で解決策を探しています。
どんな助けでも大歓迎です。