Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多表上的Hibernate条件查询_Hibernate_Hibernate Criteria - Fatal编程技术网

多表上的Hibernate条件查询

多表上的Hibernate条件查询,hibernate,hibernate-criteria,Hibernate,Hibernate Criteria,我有三张表,分别是School、SchoolType和Country。你可以看到学校和学校类型之间的关系。我想质疑的是 选择与至少有一所名为blabla的学校类型具有相同id的国家/地区 我的学校班级 @JoinColumn(name = "school_type_ref", referencedColumnName = "school") @ManyToOne(cascade = CascadeType.ALL, optional = false, fetch = FetchType.EAGE

我有三张表,分别是School、SchoolType和Country。你可以看到学校和学校类型之间的关系。我想质疑的是

选择与至少有一所名为blabla的学校类型具有相同id的国家/地区

我的学校班级

@JoinColumn(name = "school_type_ref", referencedColumnName = "school")
@ManyToOne(cascade = CascadeType.ALL, optional = false, fetch = FetchType.EAGER)
private SchoolType schooltype;
我的学校型班级

@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade = CascadeType.ALL, mappedBy = "schooltype")
private List<School> schoolList;

private String id;
选中此项:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Country> c = cb.createQuery(Country.class);
Root<Country> countries = c.from(Country.class);

Subquery<Integer> sq = c.subquery(Integer.class);
Root<SchoolType> schoolTypes = sq.from(SchoolType.class);

sq.select(schoolTypes.<Integer>get("id")).where(
    cb.equal(schoolTypes.get("schoolList").get("name"), "blabla"));

c.select(countries).where(cb.in(countries.<Integer>get("id")).value(sq));

TypedQuery<Country> q = entityManager.createQuery(c);
List<Country> result = q.getResultList();
也可以尝试使用schoolTypes.getid代替schoolTypes.getSchoolType\uuid,但它对我不起作用


我的答案是基于

您希望查询的条件:SELECT*来自名称为'blabla'的学校中id在SELECT SHOOL_type_ref中的国家/地区?国家与学校类型相关吗?@paulek我认为这是正确的版本:SELECT*从id位于SELECT type.id FROM SHOOLTYPE的国家加入学校scl on type.SHOOL=scl.SHOOLTYPE和scl.name='blabla'
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Country> c = cb.createQuery(Country.class);
Root<Country> countries = c.from(Country.class);

Subquery<Integer> sq = c.subquery(Integer.class);
Root<SchoolType> schoolTypes = sq.from(SchoolType.class);

sq.select(schoolTypes.<Integer>get("id")).where(
    cb.equal(schoolTypes.get("schoolList").get("name"), "blabla"));

c.select(countries).where(cb.in(countries.<Integer>get("id")).value(sq));

TypedQuery<Country> q = entityManager.createQuery(c);
List<Country> result = q.getResultList();