すべての Event タイプで共有されるプロパティを保持する抽象Eventクラスがあり、その下にはクラスごとに 1 つのテーブルを持つ 2 つのサブクラス (MasterEventとParentEvent) があります。
問題はMasterEvent、id 列の型が「number」であり、列ParentEventの型が「varchar2」であることです。これは、アプリを実行しようとすると、次のようになることを意味します。
HibernateException が原因: 列 event_id の * の列タイプが正しくありません。見つかった: number、予想: varchar2(255 文字)。
これは従来のデータベースであるため、データベース レベルで列の型を変更する可能性がないことに注意してください。
以下のサンプル コードは、理解を深めるのに役立ちます。
Event.groovy
package a
abstract class Event {
String id
static mapping = {
tablePerHierarchy "false"
id column: "id"
}
}
ParentEvent.groovy
package a
class ParentEvent extends Event {
static mapping = {
id column: "id"
}
}
MasterEvent.groovy
package a
class MasterEvent extends Event {
static mapping = {
id column: "id", type: "number"
}
}
type: numberあらゆる種類の組み合わせを試してみましたが、常に同じエラーが発生します。
sqlType直接キャストするか、Stringgrails にこの検証を無視させる方法はありますか?