5

私は最初のGrailsアプリを作成しており、Grailsアプリケーションジェネレーターを使用して既存の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}" 
        }
    }
4

1 に答える 1

6

Hibernate は「シリアル」を有効な Java タイプに変換できません。それは一種の古い問題です。可能であれば、この男のように、データベースの ID タイプをシリアルではなく bigint または bigserial に変更すると、問題が解決する可能性があります。そうでない場合は、次のように列のタイプを指定してみてください。

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

ID タイプを Long ではなく Integer に変更することもできます。

これらのヒントを個別に試してください。

于 2012-07-27T20:53:28.337 に答える