0

私は次のドメインクラスを持っています:

class Team{   
    static hasMany = [localMatches: Match, visitingMatches: Match]
    static mappedBy = [localMatches: 'localTeam', visitingMatches: 'visitingTeam']

    List<Match> localMatches = new ArrayList<Match>()
    List<Match> visitingMatches = new ArrayList<Match>()
}

class Match{
    Team localTeam
    Team visitingTeam
}

私が以下を実行すると:

Match match = new Match(localTeam: aLocalTeam, visitingTeam: aVisitingTeam)
match.save(flush: true, failOnError: true)

「原因:org.h2.jdbc.JdbcSQLException:列「LOCAL_TEAM_ID」にNULLは許可されていません; SQLステートメント:」という例外が発生します。

したがって、例外を回避するために、試合を保存する前に各チームで試合を設定する必要があります。

Match match = new Match(localTeam: aLocalTeam, visitingTeam: aVisitingTeam)
aLocalTeam.localMatches.add(match)
aVisitingTeam.localMatches.add(match)
match.save(flush: true, failOnError: true)

保存する前に各チームに試合を追加する必要がないように、クラスをマッピングする方法はありますか?

4

1 に答える 1

2

hasManyブロックは、aMatchに多くのlocalMatchesが含まれることを定義しますが、以下でlocalMatchesは単一のとの関係として再定義しMatchます。あなたが実際に意味していると私が信じているのは:

class Team {   
    static hasMany = [localMatches: Match, visitingMatches: Match]
    static mappedBy = [localMatches: 'localTeam', visitingMatches: 'visitingTeam']
}

class Match {
    Team localTeam
    Team visitingTeam
}

このようにマッピングされ、Teamの2つのコレクションがMatchesあり、それぞれMatchにとがlocalありvisiting Teamます。

于 2012-12-12T04:49:41.633 に答える