当我们选择父表时如何获取子表特定数据? [英] How to fetch child table specific data when we are selected parent table?
问题描述
我正在使用hibernate标准,我有两个一对多
关系的表。这些是用户和地址。用户
具有一对多关系与地址
table.One 用户
有3个地址如下
用户
userId ---- username ---- lastname
1 --- balu ---- v
地址
AddressId ----- cityName ------ userId
1 - vizag --- 1
2 ---- srikakulam ----- 1
3 ---- hyd ---- 1
但是我想要的结果就像当我获取父对象 User
时,而不是获取所有 addressList
用户我只想要CityName ='Hyd'地址对象(而不是获取所有3个r ecords for child table我只想要一条记录)。我可以如何写这个标准查询。任何人都可以帮助我。
在我看来,它只能通过hibernate过滤器来实现。
查看示例
实体定义
<$ p $ ($ name =cityName,type =string)})
public class User {
@Id
私人长ID;
@OneToMany(mappedBy =user)
@Filter(name =filtAddr,condition =city_name =:cityName)
private List< Address>地址;
}
@实体
公共类地址{
@Id
私人长ID;
private String cityName;
@ManyToOne
私人用户用户;
}
并使用会话过滤器加载数据
Filter filter = session.enableFilter(filtAddr);
filter.setParameter(cityName,Hyd);
列表<用户> users = session.createCriteria(User.class)
.setFetchMode(addresses,FetchMode.JOIN)//可选
.list();
I am working with hibernate criteria ,I have two tables with one to many
relationship .those are User and Address .User
have one to many relationship with Address
table.One user
have 3 Address like below
User
userId ---- username ----lastname
1 --- balu ---- v
Address
AddressId ----- cityName ------ userId
1 -- vizag --- 1
2 ---- srikakulam ----- 1
3 ---- hyd ---- 1
But I want Result like when I am fetching parent object User
Instead of fetching all addressList
for that user I want only CityName='Hyd' address object(Instead of fetching all 3 records for child table I want only one record).How can I write criteria query for this .Any one help me.
In my opinion it can be realized only by hibernate filters.
see example
entity definition
@Entity
@FilterDef(name = "filtAddr", parameters = {@ParamDef(name = "cityName", type = "string")})
public class User {
@Id
private Long id;
@OneToMany(mappedBy = "user" )
@Filter(name = "filtAddr", condition = "city_name = :cityName")
private List<Address> addresses;
}
@Entity
public class Address {
@Id
private Long id;
private String cityName;
@ManyToOne
private User user;
}
and loading data with session filter
Filter filter = session.enableFilter("filtAddr");
filter.setParameter("cityName", "Hyd");
List<User> users = session.createCriteria(User.class)
.setFetchMode("addresses", FetchMode.JOIN) //optional
.list();
这篇关于当我们选择父表时如何获取子表特定数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!