【问题标题】:Grails composite id throwing NullPointerExceptionGrails 复合 id 抛出 NullPointerException
【发布时间】:2013-07-17 14:35:27
【问题描述】:

我有一个 Grails 2.2.3 域类,当我使用动态脚手架时,它会抛出关于我的复合 id 的 NullPointerExeption。我只会使用pidm 字段作为主键,但偶尔有两条记录具有相同的pidm(相同的员工,但可能有名称更改或其他原因)并且Grails 有/show/ URI 有问题,因为返回了多行。这就是changeIndicator 的用武之地——如果changeIndicator 为空,则它们是当前员工。我想知道问题是否在于 pidm 和 changeIndicator 是两种不同的类型。

有谁知道错误可能是什么?

下面是类和错误:

class Employee implements Serializable {

Integer pidm
String sid
String firstName
String lastName
String middleInitial
Character changeIndicator

static mapping = {
    table 'employee'

    id composite: ['pidm', 'changeIndicator']
    columns {
        pidm column: 'PIDM'
        changeIndicator column: 'CHANGE_IND'
        // more mappings
    }
    version false
}

错误:

URI
/phoneauth/employee/list
Class
java.lang.NullPointerException
Message
Cannot get property 'id' on null object

【问题讨论】:

  • 所以你有名为table的表? [table 'table']
  • 不,我只是觉得不输入db表名会更安全。忽略这一点。编辑:我改变了它,所以现在更有意义了。
  • 您是如何尝试访问此域类的?控制器代码是调试您访问Employee 的位置所必需的。
  • 我试图通过static scaffold = true 访问课程。问题可能是 Hibernate 不允许复合主键中的可空列,因为 CHANGE_IND 列中肯定有一些空值。

标签: grails nullpointerexception grails-orm composite-key grails-domain-class


【解决方案1】:

您的主要问题是 Hibernate 不允许可空列作为复合主键的一部分。

其次,Grails 脚手架插件不能很好地处理复合键。

【讨论】:

    【解决方案2】:

    您可以生成视图并将所有模型的属性显式放入 indesx.gsp(示例)中:

    我希望这是有道理的!

    【讨论】:

      猜你喜欢
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 2013-09-07
      • 2013-06-18
      相关资源
      最近更新 更多