java Hibernate QueryException:无法解析属性
这三张表之间有这些关系
我想做的是搜索(通过code
或designation
)并获取特定主管的项目列表,类似这样:
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 楼答案
你绝对确定所有的映射和连接都有效吗
如果是这样,您可以尝试为Project声明一个隐式别名,如下所示: