Hibernate QueryException:无法解析 属性

Hibernate QueryException: could not resolve property

所以我在这 3 个表之间有这些关系
我想做的是搜索(通过 codedesignation)并获取特定负责人的项目列表,如下所示:

SELECT * FROM Project p JOIN ProjectHasChief phc ON (p.id = phc.idproject)
JOIN Chief c ON (c.id = phc.id_chief)
WHERE c.id = (myID)
AND (designation LIKE '%user_string%' OR code LIKE '%user_string%');

并且由于我使用的是休眠模式,所以我使用了 Criteria:

Criteria c = session.createCriteria(ProjectHasChief.class);
            c.add(Restrictions.eq("chief", chief))
             .add(Restrictions.disjunction()
                    .add(Restrictions.like("project.designation", reg, MatchMode.ANYWHERE))
                    .add(Restrictions.like("project.code", reg, MatchMode.ANYWHERE)));
List<ProjectHasChief> list = (List<ProjectHasChief>)c.list();

但是我得到这个错误:

org.hibernate.QueryException: could not resolve property: project.designation of: smt.agm.entities.ProjectHasChief

项目实体:

@Entity
@Table(name="projet")
public class Project {

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", columnDefinition="serial")
    private int id;

    @Column(name="code")
    private String code;

    @Column(name="designation")
    private String designation;

    @OneToMany(cascade = CascadeType.ALL, mappedBy="project", orphanRemoval=true)
    @OrderBy(clause="id DESC")
    private List<ProjectHasChief> chiefs = new ArrayList<ProjectHasChief>();
}

首席实体:

@Entity
@Table(name="chief")
public class Chief {

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", columnDefinition="serial")
    private int id;

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

ProjectHasChief 实体:

@Entity
@Table(name="mapping_chantier_chef")
public class ProjectHasChief {
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", columnDefinition="serial")
    private int id;

    @ManyToOne
    private Project project;

    @ManyToOne
    private Chief chief;

    @Column(name="date_deb")
    private Date startDate;

    @Column(name="date_fin")
    private Date endDate;
}

当休眠不知道 Project 实体的 属性 designation 时?!!

您绝对确定所有映射和连接都有效吗?

如果是这样,您可以尝试为 Project 声明一个隐式别名,如下所示:

Criteria c = session.createCriteria(ProjectHasChief.class);
        c.createAlias("project", "project") //THIS ONE
        c.add(Restrictions.eq("chief", chief))
        c.add(Restrictions.disjunction()
                .add(Restrictions.like("project.designation", reg, MatchMode.ANYWHERE))
                .add(Restrictions.like("project.code", reg, MatchMode.ANYWHERE)));

List<ProjectHasChief> list = (List<ProjectHasChief>)c.list();