次の継承階層があります。
@Entity
@Table(FRUIT)
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColum(name="FRUIT_TYPE",discriminatorType=STRING)
public class Fruit {
..
@Id
private FruitId id;
...
}
@DiscriminatorValue("APPLE")
public class Apple extends Fruit {
...
@ManyToOne
private FruitBowl bowl; //this association is only present in the subclass
...
}
class FruitBowl .. {
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "bowl")
@IndexColumn(name="POSITION",base = 1)
List<Apple> apples;
...
を実行すると、選択クエリsession.load(Apple.class,...)
に追加されます。FRUIT_TYPE = 'APPLE'
しかし、(Apple と 1:m の関係にある) FruitBowl で select を実行すると、Apple の select クエリには が含まれませんFRUIT_TYPE = 'APPLE'
。なぜこれが起こるのですか?問題を修正するにはどうすればよいですか?
クエリ -- FruitBowl のクエリ
select fruitbowl0_.BOWL_ID as BOWL1_1_0_ from FRUITBOWL fruitbowl0_ where fruitbowl0_.BOWL_ID=?
-- リンゴを取得するための Fruit のクエリ (fruit_type ='A' のレコード) -- ただし、その条件は含まれていません
select apples0_.ENTITY_ID as ENTITY3_1_, apples0_.POS as POS1_, apples0_.POS as POS0_0_, apples0_.ENTITY_ID as ENTITY3_0_0_, apples0_.COLOR as COLOR0_0_ from FRUIT apples0_ where apples0_.ENTITY_ID=?