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);