Hibernate,从父类和子类之间共享的单个表中仅选择父类列

时间:2014-07-22 18:39:09

标签: mysql hibernate web hql java-ee-7

Hibernate:我需要从单个db表中只选择父对象,这些对象在hibernate中映射到父类和子类。

这是简化的hibernate表定义:

@Entity
@Polymorphism(type = PolymorphismType.EXPLICIT)
@Inheritance(strategy = InheritanceType. SINGLE_TABLE)
public class parent{
    @Id
    @Column(name="ID")
    @GeneratedValue(strategy=GenerationType.AUTO, generator="parent_gen")
    @SequenceGenerator(name="parent_gen", sequenceName="PARENT_SEQUENCE")
    private int parentID;

    @Column(name="name")
    private String name;

} 

@Entity
@Table(name = "childtable")
public class child extends parent{
 @Column(name="favoriteColor")
    private String favoriteColor;
}

在mysql数据库中,这是" childtable"看起来像:

|id|name|favoriteColor|
|1|John|blue|
|2|Smith|red|
|3|Gary|yellow|

现在,我想从仅具有父列的子表中进行选择,并期望在hql中获取父对象。

类似的东西:

Session session = HibernateUtil.getSessionFactory().openSession();

        Query query = session
                .createQuery("from parent where id <4");
         List<parent> result = query.list();

我没有向childtable引入DTYPE,因为没有我需要将父类插入childtable的实例。我只想在进行选择查询时区分父对象和子对象。

如何让它与hibernate一起使用?

更新1: 我找到了一种通过运行来解决问题的方法。我不确定这是否是解决问题的正确方法,但它确实有效。

Query query = session
                    .createQuery("select new parent(id,name) from parent where id <4");
             List<parent> result = query.list();

1 个答案:

答案 0 :(得分:2)

我找到了一种通过运行来解决问题的方法。我不确定这是否是解决问题的正确方法,但它确实有效。

Query query = session
                .createQuery("select new parent(id,name) from parent where id <4");
         List<parent> result = query.list();