私は 2 つのドメイン クラスを持っており、互いに単方向の関係が必要です。
class User {
HistoryEntry lastFooEntry
static constraints = {
lastFooEntry(nullable: true)
}
}
class HistoryEntry {
String name
User createdBy
}
Grailsのドキュメントによると(私が理解しているように)、これがその方法です。指定belongsTo
すると、双方向の関係が作成され(私が望まないもの)、hasOne
とにかく双方向の関係でのみ機能します。
上記のモデリングの問題は、次のコードが の場合にのみ機能することentryName=='foo'
です。他の値の場合、アサーションは false です。
def addHistoryEntry(Long id, String entryName) {
def user = User.get(id)
if(!user) {
user = new User(id: id).save()
}
def entry = new HistoryEntry(createdBy: user, name: entryName).save()
if(entryName=='foo') {
user.lastFooEntry = entry
user.save()
} else {
assert user.lastFooEntry!=entry
}
}
指定することでこれを回避できます
static mappedBy = [createdBy:'']
でHistoryEntry
。しかし、IntelliJ IDEA とgrails のドキュメントによると、これは と組み合わせてのみ使用する必要があり、空のhasMany
文字列と一緒に使用したことはありません。
だから質問:これを行う正しい方法は何ですか?それとも、文書化されていない機能/バグであり、私の回避策は今のところ問題ありませんか?