Hibernate用于两个以上实体的复杂查询

Hibernate用于两个以上实体的复杂查询,hibernate,named-query,Hibernate,Named Query,我正在尝试使用hibernate查询来搜索和过滤我的实体,但我找不到任何解决方案。我有三个有界实体 集团实体 public class Group { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column private int id; @Column private String name; @EqualsAndHashCode.Exclud

我正在尝试使用hibernate查询来搜索和过滤我的实体,但我找不到任何解决方案。我有三个有界实体

集团实体

public class Group  {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column
    private int id;
    
    @Column
    private String name;
    
    @EqualsAndHashCode.Exclude 
    @OneToMany(cascade={CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH})
    @JoinTable(
            name="students_groups",
            joinColumns=@JoinColumn(name="group_id"),
            inverseJoinColumns=@JoinColumn(name="student_id")
            )
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<Student> students; 
}
我需要按group.id和course.id查找group我尝试这样进行查询

Query<Group> query = session.createQuery("from Group as g join g.students as s join s.courses as c where c.id like :courseId and g.id like :groupId", Group.class);
Query Query=session.createQuery(“从组作为g加入g.students作为s加入s.courses作为c,其中c.id like:courseId和g.id like:groupId”,Group.class);

但它不起作用:(我将非常感谢您帮助我解决这个问题,并为我的英语不好感到抱歉:)

尝试用以下方式更正您的查询:

Query Query=session.createQuery(“从g组中选择g,加入g.students,加入s.courses,其中c.id=:courseId和g.id=:groupId”,Group.class”);
请注意:

  • 只能与
    字符串\u表达式一起使用

  • 不推荐使用
    TRUE
    FALSE
    值,因为您应该使用
    @ElementCollection
    @OneToMany
    @ManyToMany
    集合的JPA
    FetchType
    属性

  • 
    public class Course {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column
        private int id;
        
        @Column
        private String name;
        
        @Column
        private String description;
    }
    
    
    Query<Group> query = session.createQuery("from Group as g join g.students as s join s.courses as c where c.id like :courseId and g.id like :groupId", Group.class);