没有外键的GORM One-to-Many关系

时间:2014-06-05 16:58:00

标签: sql grails gorm

我已经尝试了一段时间来了解GORM是如何工作的,我想我已经把它搞定了。但是,我有一段时间让我的关系正确。

这是我的数据库架构设置(2个表):

表格 - 用户

userhash varchar(255)
firstname varchar(255)
lastname varchar(255)

表格 - 日志

userhash varchar(255)
accessdate date

表中没有定义外键和主键约束。但是,在users表中,userhash将是唯一的。我没有这样设计,但我必须像这样使用它。

现在我的Grails域类:

类 - 用户

class Users {

    String userhash;
    String firstname;
    String lastname;

    static hasMany = [logs: Logs]

}

类 - 日志

class Logs {

    String userhash;
    Date accessdate;

    static belongsTo = Users;

}

在我的控制器中,我执行以下操作:

def user = Users.findByUserhash("nraboy");
println user.firstname;
println user.logs;

它打印出正确的名字,但是当我尝试显示日志时,它为空或空。我是否正确地为子表请求数据,或者我在域类设计中的某处丢失了某些内容?

我试图做以下事情,但现在也运气好了:

类 - 日志

static mapping = {
    id generator: "assigned", name: "userhash", type: "string"
}

类 - 用户

static mapping = {
    userhash generator: "foreign"
}

我认为上面的内容可以让我通过代码手动定义主键和外键,因为它并不存在于表中。虽然没有运气。

任何帮助都将不胜感激。

谢谢,

1 个答案:

答案 0 :(得分:0)

看起来您可能需要在Users中为日志关联执行某些操作,以强制外键按原样位于Logs表中。请参阅GORM docs一对多映射部分。也许是这样的事情:

static hasMany = [logs: Logs]

static mapping = {
    logs column: 'userhash'
}

我很想知道这是否有效......