UserとBankの 2 つのドメイン クラスの間に関係があります。user には多数の bank があり、bank には多数のユーザーmm_user_banks
がいて、MM 関係の両方のテーブル ID を保持する結果テーブルと呼びます。
class User {
String name
String password
Date createdAt = new Date()
Date loginAt
static hasMany = [banks:Bank]
static fetchMode = [banks: 'eager']
static constraints = {
}
static mapping = {
banks joinTable: [name: 'mm_user_banks', key: 'mm_user_id']
}
}
そして銀行...
class Bank {
Long id
String name
static belongsTo = User
static hasMany = [users:User]
static constraints = {
}
static mapping = {
id generator: 'assigned'
users joinTable: [name: 'mm_user_banks', key: 'mm_bank_id'], lazy: false
}
}
mm_user_banks
銀行を使用してユーザーを保存することもできますが、問題は、ユーザー インスタンスから銀行リストを取得しようとすると、テーブルにこのユーザーの行が複数ある場合でも、1 行しかフェッチされないことです。
例えば:
User u = new User(name: 'user', password: 'pwd')
u.addToBanks(Bank.findById(1))
u.addToBanks(Bank.findById(2))
u.addToBanks(Bank.findById(3))
u.save(flush: true)
データベースでは問題なく 3 行を取得できますが、ユーザーを取得してその銀行リストを確認すると、次のようになります。
def user = User.findById(1) //OK
println "Size ${user.banks?.size()}" //only 1??? How?
前もって感謝します!