我有两个域类,我希望彼此之间存在单向关系:
class User {
HistoryEntry lastFooEntry
static constraints = {
lastFooEntry(nullable: true)
}
}
class HistoryEntry {
String name
User createdBy
}
根据grails 文档(据我所知),这是这样做的方法。指定belongsTo
将创建一个双向关系(我不想要的),并且hasOne
无论如何只适用于双向关系。
上述建模的问题是,以下代码仅在entryName=='foo'
. 对于任何其他值,断言为假:
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
而且我从未见过它带有空字符串。
所以问题是:这样做的正确方法是什么?还是它是一个未记录的功能/错误,到目前为止我的解决方法很好?