以下に示す単一のテーブル階層があります。
@MappedSuperclass
@Table(name = "v_contract_account", schema = "SAP")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@XmlRootElement
@XmlSeeAlso({CurrencyAccount.class, ProgramAccount.class})
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class AbstractContractAccount implements Serializable {
....
}
@Entity
@Table(name = "v_contract_account", schema = "SAP")
@Immutable
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.INTEGER)
@DiscriminatorValue("0")
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class CurrencyAccount extends AbstractContractAccount {
...
}
@Entity
@Table(name = "v_contract_account", schema = "SAP")
@Immutable
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.INTEGER)
@DiscriminatorValue("1")
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class ProgramAccount extends AbstractContractAccount {
...
}
現在はそのまま動作しますが (ディスクリミネータを除く)、サブクラスからテーブル アノテーションを削除すると、Hibernate が例外をスローするのはなぜですか?
org.jboss.resteasy.spi.UnhandledException: java.lang.ClassCastException: org.jboss.resteasy.specimpl.BuiltResponse cannot be cast to [Lcom.zanox.internal.billingmasterdata.domain.entity.CurrencyAccount;
そして奇妙なことに、抽象スーパークラスにテーブルと継承の注釈を入れなくても、すべてが正常に機能します。これは、MappedSuperClass がテーブルと継承の注釈を気にしないということですか? 注釈 @Inheritance(strategy = InheritanceType.SINGLE_TABLE) がどこにも必要ない場合、どこで指定すればよいですか?
ところで、ここでの私の場合、Hibernate はテーブルを作成しません。テーブルは既に存在し、マップしたいだけです。