Hibernate用ID来查询外键字段

例如,我有两个实体:员工和地址。 在这些实体中,Employee有一个外键AddressID引用Address上的ID列。 在Java域对象中,Hibernate很好地包装了一个Address对象字段的伪造键整数字段。 但是现在,我怎么能用某个AddressID查询Employee呢?

我试图创build一个表别名。 这似乎工作,但它是相当尴尬。

我也试图做这样的事情:

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

它工作一段时间,但并不总是。 我不确定这是否正确,但我一直希望可以。

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

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属性进行查询,您必须创build别名或嵌套标准 :

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

有类似的麻烦… @ ChssPly76答案工作正常,但只是find解决scheme,如果外键不是在父表中的Id的一部分 – 你必须通过添加“referencedColumnName”修改注释:

 @ManyToOne @JoinColumn(name="address_id", referencedColumnName="addrUniqueFieldName") private Address address; 

然后你可以创build标准:

 criteria.add(restriction.eq("address.addrUniqueFieldName", 123);