2012-07-27 25 views
2

我正在編寫我的第一個Grails應用程序,並使用Grails應用程序生成器將我現有的Postgresql模式顛倒過來。 (GRAG)當我運行應用程序,我得到的錯誤:錯誤的列類型 - 找到:序列,預期:int8

Invocation of init method failed; nested exception is org.hibernate.HibernateException: Wrong column type in public.event_staff for column event_staff_id. Found: serial, expected: 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}" 
     } 
    } 

回答

4

休眠不能夠「串行」轉換爲有效的Java類型。這是一種old problem。如果可以,將數據庫ID類型更改爲bigint或bigserial而不是序列號,如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。

單獨嘗試這些提示。

+1

謝謝。最後,我需要將我的類成員eventStaffId從Long改爲Integer。更改爲Integer的 – 2012-07-28 13:31:09

+0

也適用於我。謝謝! – npellow 2012-10-23 18:41:53

相關問題