多対多の関係を持つ 2 つのオブジェクトがあります。記事はさまざまなセクションに含めることができ、セクションには多くの記事を含めることができます。
class Article {
String title
static belongsTo = Section
Set<Section> sectionSet = [] as Set
static hasMany = [
sectionSet: Section
]
}
class Section {
String title
String uniqueUrl // an unique identifier for the section
List<Article> articleList = []
static hasMany = [
articleList: Article
]
static mapping = {
uniqueUrl(unique: true)
}
boolean equals(o) {
if (this.is(o)) return true
if (getClass() != o.class) return false
Section section = (Section) o
if (uniqueUrl != section.uniqueUrl) return false
return true
}
int hashCode() {
return uniqueUrl.hashCode()
}
}
次のようにコントローラーからパラメーターをバインドして、新しい記事を作成します。
params = [title: "testArticle", "sectionSet[0].id": "1"] // a section with ID=1 exists in database
Article article = new Article(params) // NullPointerException here because I add this article into the section and uniqueUrl for calculating hashCode() is null
ID 1 のセクションが db から読み込まれず、そのフィールドがすべて null であるため、hashCode で問題が発生しました。この例は、equals と hashCode をオーバーライドしなければ問題なく動作しますが、セット内のオブジェクトを使用する場合はオーバーライドする必要があると思います...
これを解決する方法を知っている人はいますか?