一尘不染

Hibernate查询ID为外键的字段

hibernate

例如,我有两个实体:雇员和地址。在这些实体中,Employee有一个外键AddressID引用了Address上的ID列。在Java域对象中,Hibernate很好地将forgein键整数字段与Address对象字段包装在一起。但是现在,如何查询具有特定AddressID的Employee?

我试图创建一个表别名。这似乎可行,但相当尴尬。

我也曾尝试做这样的事情:

criteria.add(restriction.eq("TheAddressObjectFieldName", 123);

它有时会起作用,但并非总是如此。我不确定这是正确的方法,但我一直希望它能一直保持下去。

那么在hibernate状态下查询外键列的正确方法是什么?


阅读 253

收藏
2020-06-20

共1个答案

一尘不染

Hibernate仅“巧妙地包装”您告诉它包装的内容。因此,假设您的Employee映射如下所示:

@Entity
public class Employee {
  ...
  @ManyToOne
  @JoinColumn(name="address_id")
  private Address address;
  ...
}

并且您Address拥有一个id属性,则可以address_id通过以下方式进行查询:

session.createCriteria(Employee.class)
 .add(Restrictions.eq("address.id", addressId));

为了基于Address属性进行查询,您必须创建别名或嵌套条件

session.createCriteria(Employee.class)
 .createAlias("address", "a")
 .add(Restrictions.eq("a.postalCode", postalCode));
2020-06-20