代码之家  ›  专栏  ›  技术社区  ›  Santosh Balaji

hibernate一对多关系的5个条件连接

  •  2
  • Santosh Balaji  · 技术社区  · 8 年前

    联接查询代码

    CriteriaBuilder builder = session.getCriteriaBuilder();
    CriteriaQuery<SchoolTO> cquery = builder.createQuery(SchoolTO.class);
    Root<SchoolTO> root = cquery.from(SchoolTO.class);
    Join<SchoolTO, StudentTO> join = root.join(SchoolTO_.studentList);  
    cquery.select(root);
    cquery.where(builder.equal(join.get(StudentTO_.name),  "john"));
    cquery.distinct(true);
    List<School> list = session.createQuery(cquery).getResultList();
    

    学校班级结构

    public class School
    {
      private List<Student> list;
    }
    

    学生班级结构

    public class Student
    {
      private School school;
    } 
    

    数据

    • 学校1->约翰、马修、威廉、梅根、黛西
    • 学校2->约翰、威廉、萨曼莎
    • 学校3->黛西,马修

    join hibernate代码的实际结果

    • 学校1->约翰、马修、威廉、梅根、黛西
    • 学校2->约翰、威廉、萨曼莎

    预期结果

    • 学校1->约翰
    • 学校2->约翰

    Hibernate的加入让我得到了所有学生名为“John”的学校。但是当我访问school对象中的student对象列表时,它有所有名字的student。我正在努力达到一个低于预期的结果。让我知道我在这里做错了什么。提前谢谢

    0 回复  |  直到 8 年前
    推荐文章