同樣的問題,我發現這個Link獲得最大的修訂小於與envers
它工作正常,但問題是當我使用加入,它是不會放棄單一的結果,它是一個特定版本返回所有修訂版少於給定的修訂版。
我的代碼如下
AuditReader reader = AuditReaderFactory.get(session);
AuditQueryCreator audQueryCreator = reader.createQuery();
AuditQuery query_cusTagInst = audQueryCreator.forEntitiesAtRevision(CustomTagInstance.class, revision_Id)
.add(AuditEntity.revisionNumber().le(revision_Id))
.traverseRelation("instrument", JoinType.INNER)
.add(AuditEntity.revisionNumber().maximize().computeAggregationInInstanceContext())
.add(AuditEntity.property("instrumentId").eq(id));
CustomTagInstance customTagInst = null;
List list_cusTagInst = query_cusTagInst.getResultList();
for(int i=0; i<list_cusTagInst.size(); i++){
customTagInst = (CustomTagInstance) list_cusTagInst.get(i);
}
而且
@Audited
@Table(name = "CUSTOM_TAG_INSTANCE")
public class CustomTagInstance implements java.io.Serializable {
private Long tagInstanceId;
private Instrument instrument;
@Id
@Column(name = "TAG_INSTANCE_ID", unique = true, nullable = false, precision = 22, scale = 0)
public Long getTagInstanceId() {
return this.tagInstanceId;
}
public void setTagInstanceId(Long tagInstanceId) {
this.tagInstanceId = tagInstanceId;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "INSTRUMENT_ID")
public Instrument getInstrument() {
return this.instrument;
}
public void setInstrument(Instrument instrument) {
this.instrument = instrument;
}
請告訴我有什麼,我需要使用得到的只有最大的修訂,而不是特定的修訂少。
您是否期望得到RevisionNumber作爲結果或實際的實體實例?此外,IDK這個'computeAggregationInInstanceContext'是什麼? '#max()'方法只適用於投影查詢。 – Naros
不,我不想只修改最大值。我正試圖找到每個實體的最大修訂版,小於或等於給定修訂版號。我添加了與我的問題類似的問題的鏈接。但在這裏,我必須使用**加入**,並添加聯接後,它給出多個記錄。 –
和** computeAggregationInInstanceContext **我發現它與這[Link_1](https://hibernate.atlassian.net/browse/HHH-7827])和從這[Link_2](http://stackoverflow.com/questions/ 25723323/find-max-revision-of-each-entity-less-than-or-equal-to-given-revision-with-enver) –