2

OREnvers 基準 API に条件を追加する方法を知りたいです。

    public IEnumerable<Guid> GetHistory(object id, params string[] props)
    {
        var auditQuery = AuditReaderFactory.Get(Session).CreateQuery()
            .ForRevisionsOfEntity(typeof(T), false, true);

        foreach (var prop in props)
        {
            auditQuery.Add(AuditEntity.RelatedId(prop).Eq(id)); // <-- adds AND, while OR is required!
        }

        return auditQuery
            .GetResultList<object[]>()
            .Select(i => ((T)i[0]).ID)
            .Distinct();
    }
4

2 に答える 2

5

を使用しAuditEntity.Disjunction()ます。

あなたの例では、次のようなものです...

[..]
var disjunction = AuditEntity.Disjunction();
foreach (var prop in props)
{
  disjunction.Add(AuditEntity.RelatedId(prop).Eq(id)); 
}
auditQuery.Add(disjunction);
[..]
于 2014-10-30T16:18:32.643 に答える
2

上記のJava@Rogerように、私はこれが好きでした。(万が一、必要な方がいらっしゃいましたら)

public List<Employee> getAuditHistory(Session session, int id, String property) {
    AuditReader auditReader = AuditReaderFactory.get(session);
    List<Employee> employeeHistory = new ArrayList<>();
    if (auditReader != null) {
        AuditQuery auditQuery = auditReader.createQuery().forRevisionsOfEntity(Employee.class, true, false)
                .add(AuditEntity.property(ResultsConstants.Employee_ID).eq(id));
        AuditDisjunction auditDisjunction = null;
        if (property.equalsIgnoreCase("FULL_NAME")) {
            auditDisjunction = AuditEntity.disjunction().add(AuditEntity.property("FIRST_NAME".toUpperCase()).hasChanged())
                    .add(AuditEntity.property("LAST_NAME".toUpperCase()).hasChanged());
        } else {
            auditQuery = auditQuery.add(AuditEntity.property(property.toUpperCase()).hasChanged());
        }
        auditQuery = auditQuery.addOrder(AuditEntity.property("MODIFIED_DATE").desc());
        if(null != auditDisjunction){
            auditQuery = auditQuery.add(auditDisjunction);
        }
        if (auditQuery != null) {
            if (auditQuery.getResultList().isEmpty()) {
                // Log here or throw it back to caller
            }
            employeeHistory.addAll(auditQuery.getResultList());
        }
    }
    return employeeHistory;
}
于 2018-01-12T17:13:11.623 に答える