@Inheritance TABLE_PER_CLASS标准奇怪的行为

时间:2011-05-25 13:51:51

标签: java hibernate inheritance

在我的应用程序中,我有一个像这样的映射

@MappedSuperclass
public abstract class Base implements Serializable {

@Entity
@Table(name = "LevelOne")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class LevelOne extends Base {

@Entity
@Table(name = "LevelTwo")
public class LevelTwo extends LevelOne {

@Entity
@Table(name = "LevelThree")
public class LevelThree extends LevelTwo {

表格按预期在数据库中创建。当我尝试创建这样的查询时,我遇到了问题:

session.getCurrentSession().createCriteria(LevelOne.class, "levelOne"). [..] .list();

我不仅从LevelOne表中获得了所有其他LevelX表的结果。

我不确定这种行为是否是预期的,或者我的映射是否因为没有使用带有“@Inheritance”注释的抽象类而出错,但是我只需要获得“LevelOne”结果。 我怎么能得到它们?

1 个答案:

答案 0 :(得分:2)

是的,这是预期的行为。如果仅需要LevelOne,请在隐式class属性中添加限制:

session.getCurrentSession()
    .createCriteria(LevelOne.class, "levelOne")
    .add(Restrictions.eq("class", LevelOne.class))
    . [..] .list();