1

有人可以帮我解决我的情况。我有以下代码。

class Employee {

    Integer empId
    String firstName
    String lastName

    static constraints = {
        empId()
        firstName()
        lastName()
    }

    static mapping = {
        id generator:'assigned', name:'empId'
        version false
    }
}

该代码允许我通过“创建”保存员工,但给出以下错误消息

“未找到 ID 为空的员工”,并且在列表中,所有员工都已列出,但单击任何 Emp Id 都会出现相同的错误。请帮忙。这让我发疯了。

洛基


感谢您的回复。就像我提到的那样,我可以将 empId 保存在数据库中,但仍然会收到该消息并查看分配了 id (empId) 的列表。链接指向员工/节目,末尾没有数字。但是 employee/show/22(empId) 工作正常。employee/edit/22 也可以,但更新不起作用。

我没有使用任何分配的序列。只是一些随机整数。也许更好的例子是使用 SSN 而不是 empId。

再一次感谢你。


你是一个很好的帮助伙伴。感谢您的时间和耐心。我没有写任何特殊的更新或保存(我太新了,不能深入挖掘)。只需使用 grails 来生成所有内容。但是,我确实找到了解决方法。我更改了域类以添加变量 id (Long) 并添加 empId setter 方法以将 empId 值分配给 id。做到了。这是我的代码。

class Employee { Long id Long empId String firstName String lastName

static constraints = {
    empId()
    firstName()
    lastName()
}

static mapping = {
    id generator:'assigned', name:'empId', column: 'emp_id'
    version false
}

public void setEmpId(Long empId){
    this.empId = empId
    this.id = empId
}

}

如果您有更好的方法,请随时提出建议。

问候

洛基

4

1 回答 1

0

如果您使用的是“分配”序列,那么您必须在保存之前自己分配对象 ID。否则,您的对象将使用 null 或“默认 0”id 保存。如果你想让 GORM 为你分配一个 id,你需要使用另一种类型的生成器,比如“sequence”生成器。就像:

id name: 'customId', generator: 'sequence', params: [sequence:'some_sequence']

更多关于 id 生成器的信息在这里

于 2012-08-01T03:42:00.153 回答