jpa一对多查询的条件设置问题

leung23 2013-05-06 11:06:14
假设有两个表,employee表和address表。雇员可以没有地址,也可以有多个地址,如下
地址表以empId为外键,对应雇员表的id。
雇员王五有3个地址,张三、李四均没有地址记录。

雇员表:
id--+--name--+
1 | 张三 |
2 | 李四 |
3 | 王五 |
----+--------+
地址表:
id-+--empId--+--address--+--status--+
1 | 3 | beijing | 0 |
2 | 3 | tianjin | 0 |
3 | 3 | chengde | 1 |
---+---------+-----------+----------+

希望查出的结果是

empId-+--empName--+--address--+--status--+
1 | 张三 | | |
2 | 李四 | | |
3 | 王五 | beijing | 0 |
3 | 王五 | tianjin | 0 |
------+-----------+-----------+----------+

雇员的实体类如下:
@Entity
@Table(name = "employee")
public class Employee {
  private int id;
  private String name;
  private Set<Address> address = new HashSet();

  @OneToMany(targetEntity=Address.class,mappedBy="empId",cascade=CascadeType.ALL)
    public Set getAddress() {
      return address;
    }

    public void setAddress(Set address) {
      this.address = address;
    }


查询类如下:
  StringBuffer hsql1 = new StringBuffer("from Employee emp" );
  List rstList = employeeDao.findList(hsql1.toString());
这样能够查出
empId-+--empName--+--address--+--status--+
1 | 张三 | | |
2 | 李四 | | |
3 | 王五 | beijing | 0 |
3 | 王五 | tianjin | 0 |
3 | 王五 | chengde | 1 |
------+-----------+-----------+----------+

请问怎样设置条件,能够过滤掉address.status为1的记录呢?

请高手不吝赐教哈,谢谢!


...全文
458 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
leung23 2013-05-06
  • 打赏
  • 举报
回复
终于特么解决了!唉 StringBuffer hsql1 = new StringBuffer("from Employee emp left join fetch emp.address addr" + " where emp.status=0 and (addr.status=0 or addr.status is null)"); where 子句的条件 在问题里没有写 。其实 我这个问题就是想问:一对多的A join B,对B设查询条件,该怎么写~~ 谢谢唯一的楼上的回复,虽然没有具体的内容,不过分还是 给你吧。
zuxianghuang 2013-05-06
  • 打赏
  • 举报
回复
没有在字段上加加查询条件吧,排序到是有。 这个, 要不你自己加个注解,把查询出来的过滤一下, 或者在setter方法里自己过滤。 要么直接自己查询

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧