相关疑难解决方法(0)

使用条件查询检索多态Hibernate对象

在我的模型中,我有一个抽象的"用户"类,以及多个子类,如Applicant,HiringManager和Interviewer.它们在一个表中,我有一个DAO来管理它们.

用户:

@Entity
@Table(name="User")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
    name="role",
    discriminatorType=DiscriminatorType.STRING
)
public abstract class User extends BaseObject implements Identifiable<Long> ...
Run Code Online (Sandbox Code Playgroud)

HiringManager(例如):

@Entity
@DiscriminatorValue("HIRING_MANAGER")
public class HiringManager extends User ...
Run Code Online (Sandbox Code Playgroud)

现在,如果我想让所有与部门无关的招聘经理,我该怎么做?我想它看起来像是这样的:

DetachedCriteria c = DetachedCriteria.forClass(User.class);
c.add(Restrictions.eq("role", "HIRING_MANAGER"));
c.add(Restrictions.isNull("department"));
List<User> results = getHibernateTemplate().findByCriteria(c);
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,Hibernate抱怨"无法解析属性:角色"(这实际上是有道理的,因为User类实际上没有明确的角色属性)
那么正是我正在尝试做的事情的正确方法是什么?

polymorphism hibernate jpa criteria detachedcriteria

14
推荐指数
1
解决办法
1万
查看次数

Hibernate多态查询

我有两个类,Person和Company,来自另一个类Contact.它们在两个表(Person和Company)中以多态形式表示.简化的类看起来像这样:

public abstract class Contact {

  Integer id;

  public abstract String getDisplayName();

}

public class Person extends Contact {

  String firstName;
  String lastName;

  public String getDisplayName() {
    return firstName + " " + lastName;
  }

}

public class Company extends Contact {

  String name;

  public String getDisplayName() {
    return name;
  }

}
Run Code Online (Sandbox Code Playgroud)

问题是我需要查询查找包含某个字符串的displayName的所有联系人.我不能使用displayName进行查询,因为它不是任何一个表的一部分.有关如何进行此查询的任何想法?

java polymorphism hibernate hql

6
推荐指数
1
解决办法
5183
查看次数

标签 统计

hibernate ×2

polymorphism ×2

criteria ×1

detachedcriteria ×1

hql ×1

java ×1

jpa ×1