ドメイン フィールド:
startDate: Date
length: Integer
perpetuity: Boolean
expiryDate: Transient (startDate + length (in years))
ドメイン メソッド - これらのメソッドは、ユーザーが 4 つの異なる有効期限ステータスを検索するための大きなフィルター フォームでのフィルター処理に使用されます。
Date getExpiryDate() {
if (this.startDate == null || this.length == null) {
return null
}
Timestamp startDate = this.startDate;
Calendar expirationDate = Calendar.getInstance()
expirationDate.setTime(startDate)
expirationDate.add(Calendar.YEAR, this.length)
return expirationDate.getTime()
}
String getMechExpiredStatus() {
String isExpiredString = 'Unspecified'
Date expDate = getExpiryDate()
if (expDate != null) {
if (expDate < new Date()) {
isExpiredString = 'Yes'
} else {
isExpiredString = 'No'
}
} else if (isPerpetual && startDate != null) {
isExpiredString = 'Perpetual'
}
return isExpiredString
}
結果リストの作成
PagedResultList getMechanisms(offset, max, sortColumn, sortOrder, filters, idsOnly = false) {
def criteria = Mechanism.createCriteria()
def results = criteria.list(max: max, offset: offset) {
if (idsOnly) {
projections {
property('id')
}
}
if (filters && filters.idFilter) {
eq('id', filters.idFilter);
}
...
}
if (filters && filters.expiredFilter != null && filters.expiredFilter) {
// Do Work
// Tried getting results and removed invalid results that do not meet the
// expired filter selection
}
return results
}
一時フィールド「expiryDate」または getMechExpiredStatus メソッドを使用して createCriteria を記述する方法が見つからないようです。
他のフィルターを使用してアイテムのリストを取得してから、有効期限フィルターで無効なアイテムを個別に削除しようとしましたが、PagedResultList が適切に更新されません。現在のページ化された結果リストを返すだけです。PagedResultList オブジェクトに関するヘルプもあまり見つかりません。Remove と Add は何らかの理由でブール値を返します。どうやら私はオブジェクトをよく理解していません。
最初の基準リストから最大値とオフセットを削除すると、クエリの実行に非常に長い時間がかかります。
これを達成する方法はありますか?