sav*_*nna 39 hibernate criteria
例如,我有两个实体:Employee和Address.在这些enitities中,Employee有一个外键AddressID引用Address上的ID列.在Java域对象中,Hibernate使用Address对象字段很好地包装了forgein键整数字段.但是现在,我如何使用某个AddressID查询Employee?
我试图创建一个表别名.这似乎有效,但它相当尴尬.
我也尝试过这样的事情:
criteria.add(restriction.eq("TheAddressObjectFieldName", 123);
Run Code Online (Sandbox Code Playgroud)
它工作一段时间但并不总是.我不确定这是正确的方法,但我希望它能一直这样.
那么在hibernate中查询外键列的正确方法是什么?
Chs*_*y76 73
Hibernate"很好地包装"你告诉它包装的东西.因此,假设您的Employee映射看起来像:
@Entity
public class Employee {
...
@ManyToOne
@JoinColumn(name="address_id")
private Address address;
...
}
Run Code Online (Sandbox Code Playgroud)
并且您Address有一个id属性,您可以根据address_idvia 查询:
session.createCriteria(Employee.class)
.add(Restrictions.eq("address.id", addressId));
Run Code Online (Sandbox Code Playgroud)
要基于Address属性进行查询,您必须创建别名或嵌套条件:
session.createCriteria(Employee.class)
.createAlias("address", "a")
.add(Restrictions.eq("a.postalCode", postalCode));
Run Code Online (Sandbox Code Playgroud)
小智 5
有类似的麻烦... @ ChssPly76答案很好,但是如果外键不是父表中ID的一部分,则刚刚找到解决方案-您必须通过添加“ referencedColumnName”来修改注释:
@ManyToOne
@JoinColumn(name="address_id", referencedColumnName="addrUniqueFieldName")
private Address address;
Run Code Online (Sandbox Code Playgroud)
然后您可以创建条件:
criteria.add(restriction.eq("address.addrUniqueFieldName", 123);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39097 次 |
| 最近记录: |