在我的应用程序中,我有一个像这样的映射
@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”结果。 我怎么能得到它们?
答案 0 :(得分:2)
是的,这是预期的行为。如果仅需要LevelOne
,请在隐式class
属性中添加限制:
session.getCurrentSession()
.createCriteria(LevelOne.class, "levelOne")
.add(Restrictions.eq("class", LevelOne.class))
. [..] .list();