【发布时间】:2009-11-09 17:23:22
【问题描述】:
我有以下继承层次结构。
@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' 添加到选择查询中。但是,如果我在 FruitBowl(与 Apple 的关系为 1:m)上进行选择,则 Apple 上的选择查询不包含 FRUIT_TYPE = 'APPLE'。为什么会这样?我该如何解决这个问题?
查询 --查询 FruitBowl
select fruitbowl0_.BOWL_ID as BOWL1_1_0_ from FRUITBOWL fruitbowl0_ where fruitbowl0_.BOWL_ID=?
--查询 Fruit 以检索 Apples(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=?
【问题讨论】:
-
@kan - 我已经根据您发布的查询/数据编辑了我的答案;请看一下。
标签: hibernate annotations associations hibernate-annotations