ここでの問題は、available
やのようなドメインクラスではないフィールドを表現しようとしていることoccupied
です。HQL \ GORMにこれを実行させようとすると、少しイライラする可能性がありますが、不可能ではありません。ここにはいくつかの選択肢があると思います...
1.)使いやすいようにドメインクラスを構築します。 おそらく、あなたの部屋はマッピングテーブルを介して予約について知る必要があります。あるいは、コードをどのように見せたいかを書いてから、デザインを調整する必要があります。
例えば。たぶんあなたはあなたのコードをこのように見せたいでしょう...
RoomReservation.queryAllByRoomAndDateBetween(room, arrivalDate, departureDate);
次に、このように実装します...
class RoomReservation{
...
def queryAllByRoomAndDateBetween(def room, Date arrivalDate, Date departureDate){
return RoomReservation.withCriteria {
eq('room', room)
and {
between('departureDate', arrivalDate, departureDate)
}
}
}
2.)私の2番目の考えは... データベースを何に役立つかのために使用しても大丈夫です。コードでSQLを使用することが、何かを行うための最も効果的な方法である場合があります。 適度にそれを行い、一元化して単体テストを続けてください。 クエリはそれほど複雑ではないため、このアプローチを使用することはお勧めしませんが、これはオプションです。何百万ものオブジェクトに要約データを照会する「ダッシュボードビュー」などのストアドプロシージャを使用します。
class Room{
...
def queryReservations(){
def sql = new Sql(dataSoruce);
return sql.call("{call GetReservations(?)}", [this.id]) //<-- stored procedure.
}
}