を照会:動物および哺乳:だから、私は2つのテーブルを持っているを接合し、単一テーブル継承を混合し、私は、次の構成で動作しているWebアプリケーション(Iエンティティ名を変更)を持つすべてのオブジェクトの
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "animals")
public abstract class Animal { ...
@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Mammal extends Animal { ...
@Entity
@Table(name = "mammals")
@PrimaryKeyJoinColumn(name = "mammal_id")
@DiscriminatorValue(value = "dog")
public class Dog extends Mammal { ...
@Entity
@Table(name = "mammals")
@PrimaryKeyJoinColumn(name = "mammal_id")
@DiscriminatorValue(value = "cat")
public class Cat extends Mammal { ...
を。 方法が完全に理解できない限り、この設定は機能しています。 Mammalでは継承タイプがJOINEDからSINGLE_TABLEに変更されているため、catsとdogsはmammal_idカラムでanimalsテーブルに結合された哺乳類テーブルに保存されます。
問題はそれが多型の方法で哺乳類(猫や犬)を取得することはできないからである。
Mammal mammal = (Mammal) hibernateTemplate.get(Mammal.class, id);
または単一のHibernateクエリで哺乳動物(犬・猫)のリスト:
List<Mammal> list = (List<Mammal>) hibernateTemplate.find("from Mammal");
「Mammalはエンティティではないため、「未知のエンティティ:Mammal」はマッピングされたスーパークラスです。
たとえば、以下のような構成でいくつかの変更を試みました。これは意味をなさないと思われますが、その場合は、テーブル猫と犬(存在しない)を検索するため、「エンティティを読み込めませんでした:哺乳動物」が見つかりました。
だから、@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "animals")
public abstract class Animal { ...
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "mammals")
@PrimaryKeyJoinColumn(name = "mammal_id")
@DiscriminatorColumn(name = "type")
public abstract class Mammal extends Animal { ...
@Entity
@DiscriminatorValue(value = "dog")
public class Dog extends Mammal { ...
@Entity
@DiscriminatorValue(value = "cat")
public class Cat extends Mammal { ...
、要約する:私は同じように(2つのテーブル:動物や哺乳類の)作業Webアプリケーションを維持したいが、同時に多型のクエリを行うことができる:哺乳類のリストを取得する(猫および犬)に問い合わせます。
私は十分に明確であり、どんな助けでも事前に感謝したいと思います。
ANOTHER TRY:
"次のテーブルを含む外部キー円形の依存関係:"
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "animals")
public abstract class Animal { ...
@Entity
@Table(name = "mammals")
@PrimaryKeyJoinColumn(name = "mammal_id")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Mammal extends Animal { ...
@Entity
@Table(name = "mammals")
@DiscriminatorValue(value = "dog")
public class Dog extends Mammal { ...
@Entity
@Table(name = "mammals")
@DiscriminatorValue(value = "cat")
public class Cat extends Mammal { ...
これを解決しましたか? – rmarimon
これを解決するには? – Alex