当我们选择父表时如何获取子表特定数据? [英] How to fetch child table specific data when we are selected parent table?

查看:111
本文介绍了当我们选择父表时如何获取子表特定数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆