【问题标题】:How to get all objects of concrete class in table-per-hierarchy with hibernate?如何使用休眠获取每个层次结构表中具体类的所有对象?
【发布时间】:2014-02-28 15:33:32
【问题描述】:

我正在使用 Spring MVC 和 Hibernate 使用 Netbeans(Maven Web 应用程序)开发一个 Web 应用程序。我有一个带有多个具体类(父、子等)的抽象类(用户)。我选择了一个按层次结构的表结构,以便我有 1 个表,其中包含这些具体类的所有对象。但是我找不到获取某个具体类的所有对象的方法。我收到以下错误:

java.lang.IllegalArgumentException:为 TypedQuery [domain.Parent] 指定的类型与查询返回类型 [class domain.User] 不兼容

有谁知道我如何投射这些物体?

【问题讨论】:

  • 您能否也发布您的查询和调用它的代码?
  • 我使用 HQL 和 Query 类解决了这个问题。好吧,我希望我这样做,我检查了查询的返回类型的类,它说是 parent

标签: java hibernate table-per-hierarchy


【解决方案1】:

您的 BD 中应该有一个鉴别器列,以及这样的映射:

@DiscriminatorColumn(name="TYPE", discriminatorType=DiscriminatorType.INTEGER)
public abstract class User {

和:

@DiscriminatorValue("1")
public class Parent extends User {

然后您可以在查询中使用属性类。例如:

getSession().createCriteria(User.class).add(Restrictions.eq("class", 1))

或在 HQL 中:

FROM User WHERE class = 1

【讨论】:

  • 我使用了 HQL: String hql = "FROM User WHERE type = 'parent'";查询查询 = em.createQuery(hql);返回查询.getResultList();非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
相关资源
最近更新 更多