@Inheritance TABLE_PER_CLASS条件奇怪的行为

问题描述

|| 在我的应用程序中,我有一个这样的映射
@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();
我从所有其他LevelX表中不仅从LevelOne表中获得结果。 我不确定是否会发生此行为,或者通过不使用带有\“ @ Inheritance \”批注的抽象类来映射是否出错,但是我只需要获取\“ LevelOne \”结果。 我怎么能得到它们?     

解决方法

是的,这是预期的行为。如果仅需要
LevelOne
,则对隐式
class
属性添加限制:
session.getCurrentSession()
    .createCriteria(LevelOne.class,\"levelOne\")
    .add(Restrictions.eq(\"class\",LevelOne.class))
    . [..] .list();