有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate QueryException:无法解析属性

这三张表之间有这些关系 check this pic
我想做的是搜索(通过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%');

因为我使用了hibernate,所以我使用了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;
}

项目拥有主要实体:

@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;
}

hibernate什么时候不知道Project实体的designation属性


共 (1) 个答案

  1. # 1 楼答案

    你绝对确定所有的映射和连接都有效吗

    如果是这样,您可以尝试为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();