2016-09-15 14 views
0

私はこの問題の答えをここや他の場所で見てきましたが、追跡できるのは、最高のID、最大のdateCreated、または最新のデータベースエントリですが、私がしたいことは、別の基準にもマッチする、作成された最新のオブジェクトを取得することです。私のドメインクラスは、以下のプロパティを持っています:idnumbercompanytypedateCreatedおよびcontentです。 companyプロパティは 'OYG'または 'BAW'にのみ設定でき、numberプロパティは自動インクリメントintです。私がしたいのは、最高のnumberのレコードで、そのレコードのcompanyプロパティが 'OYG'または 'BAW`に設定されているレコードを取得することです。grails - findBy最高のIDと別の基準

+----------------------------------------------------------+ 
| id | number | company | type | dateCreated | content | 
+----------------------------------------------------------+ 
| 1 | 0 | OYG | TsAndCs | 15/09/2016 | stuff | 
| 2 | 0 | BAW | TsAndCs | 15/09/2016 | stuff | 
| 3 | 1 | OYG | TsAndCs | 16/09/2016 | stuff | 
| 4 | 2 | OYG | TsAndCs | 17/09/2016 | stuff | 
| 5 | 1 | BAW | TsAndCs | 16/09/2016 | stuff | 
+----------------------------------------------------------+ 

私はそれにid 4. DEFドキュメント=ドキュメントを持つオブジェクトを戻す必要がありDEFドキュメント= Document.findBy 最高 NumberAndCompany( 'OYG')を言いたい:

ので、ここでは一例です.findBy 最高 NumberAndCompany( 'BAW')はID 5のオブジェクトなどを戻す必要があります。

助けてください。ありがとう!

答えて

2

数字順に降順で注文し、結果を1つに制限すると、十分に簡単であるはずです。だからおそらくこのような何か?

String companyName = 'OYG' 
def results = MyDomain.createCriteria().list() { 
    eq("company", companyName) 
    maxResults(1) 
    order("number", "desc") 
} 
println results[0].id // will print 4 

このアプローチを使用すると、会社名をパラメータとして渡すことができるように名前付きクエリを作成できます。

0

ジョシュア・ムーアがあなたに良い解決策を与えたにもかかわらず、もう1つの単純な方法があります。

MyDomain.findAllByCompany(company, [sort: 'number', order: 'desc', limit: 1])?.first() 
関連する問題