【问题标题】:GORM One-to-Many relationship without foreign keys没有外键的 GORM 一对多关系
【发布时间】:2014-06-05 16:58:00
【问题描述】:

我一直在尝试了解 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;

它打印出正确的名字,但是当我尝试显示日志时,它是 null 或空的。我是否错误地为子表请求数据,或者我在域类设计中的某处遗漏了什么?

我尝试过以下操作,但现在也很幸运:

类 - 日志

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

类 - 用户

static mapping = {
    userhash generator: "foreign"
}

我认为以上内容可以让我通过代码手动定义主键和外键,因为表中不存在它。不过运气不好。

任何帮助将不胜感激。

谢谢,

【问题讨论】:

    标签: sql grails grails-orm


    【解决方案1】:

    看起来您可能必须在用户中执行某些操作才能使日志关联强制外键在日志表中,因为它是。请参阅GORM docs 一对多映射部分。也许是这样的:

    static hasMany = [logs: Logs]
    
    static mapping = {
        logs column: 'userhash'
    }
    

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

    【讨论】:

    • 嗨,当我这样做时,我会遇到以下类型的错误:不成功的 alter table users_logs add constraint FK6F4170C73EC8C10A foreign key (userhash) references users
    • 嗯...你确定你的数据是一致的吗?日志表中的所有“用户哈希”值都有效吗?是否为空值?
    • 数据确实匹配。没有空值。我的 id 字段可能有问题吗?我的表没有 id 列,所以我必须将 id 属性映射到 Users 中的 userhash。不确定在日志中将其映射到什么,因为它更加复合(userhash 和 accessdate 本身都不是唯一的)。任何建议将不胜感激。谢谢,
    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 2020-04-24
    • 2011-12-06
    • 1970-01-01
    • 2015-05-11
    • 2020-05-16
    • 2015-02-14
    • 1970-01-01
    相关资源
    最近更新 更多