错误的列类型 - 发现:serial,expected:int8

时间:2012-07-27 18:22:16

标签: hibernate postgresql grails

我正在编写我的第一个Grails应用程序,并且使用Grails Application Generator转换了现有的Postgresql架构。 (GRAG)当我运行应用程序时,我收到错误:

  

调用init方法失败;嵌套异常是   org.hibernate.HibernateException:错误的列类型   列event_staff_id的public.event_staff。发现:连续,预期:   INT8

我猜这是因为“串行”不是Postgresql中的真正的类型,而是更多的是与序列绑定的自动递增整数值的别名。我想有一个干净的方法可以解决这个问题,但是没有Hibernate的经验,我不确定最好的方法。

这是有问题的课程:

 class EventStaff {
        static mapping = {
             table 'event_staff'
             // version is set to false, because this 
             // isn't available by default for legacy databases
             version false
             id generator:'identity', column:'event_staff_id', name: 'eventStaffId'
             staffMemberIdStaffMember column:'staff_member_id'
             gameIdGame column:'game_id'
        }

        Long eventStaffId
        Boolean shouldNotify
        Date created
        Date modified
        // Relation
        StaffMember staffMemberIdStaffMember
        // Relation
        Game gameIdGame

        static constraints = {
            eventStaffId()
            shouldNotify()
            created()
            modified()
            staffMemberIdStaffMember()
            gameIdGame()
        }

        String toString() {
            return "${eventStaffId}" 
        }
    }

1 个答案:

答案 0 :(得分:4)

Hibernate无法将'serial'转换为有效的Java类型。这是一种old problem。如果可以,将数据库ID类型更改为bigint或bigserial而不是serial,如this guy所做的那样,它可能会解决您的问题。如果没有,请尝试使用以下命令指定列的类型:

id generator:'identity', column:'event_staff_id', 
name: 'eventStaffId', type: 'serial' //though I don't know if 'serial' will work in this dialect.

仍然可以尝试将您的ID类型更改为Integer而不是Long。

单独尝试这些提示。