hibernate3ではまった!第四弾。

いい加減にしてくれぇぇぇえ。

DTYPEっていうカラムが勝手に追加されている

スキーマエクスポートすると、いくつかのテーブルにDTYPEっていう長さ31のカラムが勝手に追加されている。何これ?けどきっとhibernateのおせっかいであることに間違いない!hibernate annotationのマニュアルを「DTYPE」で調べてみると、ヒットした。ほらー!やっぱり!!

The default name of the discriminator column is DTYPE.

DTYPEが追加されているクラスの共通点は、「@org.hibernate.annotations.Entity(polymorphism = PolymorphismType.EXPLICIT)」があること。この辺が怪しいわけだ。

解決策

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

を追加すると、DTYPEカラムはなくなります。詳しくは分からないけど、継承関係を実現する上で、サブクラスなのかスーパークラスなのか、どっちかのID?を覚えるのに使うみたい。
この指定を追加することで、1クラスにつき1テーブル、という指定となり、不必要となるわけです。


2007/8/30 追記
うまくいくと思ったんですが、結局サブクラスのほうのテーブルとunion allなんてしちゃってて、データがだぶって表示されちゃいます。この件、断念。残念!javaクラスのほうの継承関係をやめて全部書きまする。。。