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クラスのほうの継承関係をやめて全部書きまする。。。