繁体   English   中英

从数据库中选择,以指定嵌套集合的条件

[英]Select from DB be specifying criteria for nested collection

我有这样的实体结构(省略了注释和标识符):

   public class A {
      List<B> bList;
    }

    public class B {
      List<C> cList;
    }

    public class C {
      String name;
    }

如何编写条件(或HQL / JPQL查询)以检索C.name等于“ Peter”的A所有实例?

即是这样的:

SELECT * FROM A WHERE A.bList.cList.name = 'Peter'

运行此(JPQL),让我知道您的结果:

SELECT DISTINCT a FROM A a
WHERE
EXISTS
( 
    SELECT b FROM B b
    WHERE EXISTS ( SELECT c FROM C c WHERE c.name = "Peter" AND c.b_id = b.b_id )
    AND b.a_id = a.a_id
)
  • 我假设a_id是A的PK
  • b_id是B的PK,b.a_id引用A.a_id
  • c.b_id对B.b_id的引用

HQL查询应该像

Query query = session.getCurrentSession().createQuery("FROM A AS a WHERE a.bList.cList.name = :cname");
query.setParameter("cname", "Peter");
return query.list();

我假设您的实体关系如下

@Entity
@Table(name = "TABLE_A")
public class A {
@OneToMany(mappedBy="a")
List<B> bList;
}

@Entity
@Table(name = "TABLE_B")
public class B {

@ManyToOne
@JoinColumn(name="a_id")
private A a;

@OneToMany(mappedBy="department")
List<C> cList;

}

@Entity
@Table(name = "TABLE_C")
public class C {

@ManyToOne
@JoinColumn(name="b_id")
private B b;

@Column(name="name")
String name;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM