どちらを使用するのが良いか、データベースビューか、単にデータベースのフィールドを保持したいのですが。ビューを使用して計算されたフィールドまたはデータベース内に永続化するフィールド
例えば、私は次のビューvw_stats
でwin_count
を初期化しています:
package com.x
class Stat {
//fields here...
static mapping = {
table 'vw_stats'
version false
}
}
それとも、私がフィールドwinCount
を持続する必要があります、ドメインクラスにマッピングされ
...
CASE
WHEN game.in_decision = true AND game.user_score > game.opponent_score THEN 1
ELSE 0
END AS win_count,
...
このドメインクラスを使用してデータベースを保存してから保存しますか?
package com.x
class Game {
//fields here...
Short winCount = 0
static constraints = {
//constraints here...
winCount nullable: false, range: 0..99
}
def beforeInsert(){
this.beforeUpdate()
}
def beforeUpdate(){
//other manipulations here...
if inDecision and userScore > opponentScore
winCount = 1
}
}
問題私が見つけビューで、アプリケーションを実行する際には、テーブルを生成し、その後、私は手動でテーブルを削除し、ビューを生成するためのコードを実行しなければならないことです。
更新番号1 ビューではなくデータベースに保存することでIOコストを削減できますか?
更新#2 言い換えれば、サービスの結果フィールドに集計関数を適用できるはずです。
ああ、スタックオーバーフローに関する推奨事項を尋ねる必要はありません。それは許可されていません。 –
criteriaQueryを使用してwinCountにカウント(または集計関数)を適用できますか? – TekiusFanatikus
はい。他のドメインクラスのプロパティと同様に利用できます。 wincountが動作しない唯一の時間はユニットテストです。 –