Hibernate执行createQuery报错Unknown column 'employee0_.comp'问题求解
问题1解答
employee0_是Hibernate执行查询时自动为employee表生成的别名,别名规则通常是实体名加顺序数字后缀,不需要用户手动定义,属于Hibernate的自动生成逻辑。
问题2解答
你编写的HQL语句中用到了employee实体的comp关联属性,Hibernate生成原生SQL时会自动拼接多表关联的匹配条件,该条件会被放在WHERE子句或者JOIN的ON条件中,所以即便你手动没有写WHERE子句,最终执行的SQL里也会存在相关条件。
问题3解答
报错的根本原因是employee实体的关联注解配置和实际表字段不匹配:
你在employee实体中给comp属性配置的@JoinColumn(name="comp")指定外键列名为comp,但你的employee表中实际存储公司关联的字段是company,表中根本不存在comp字段,所以触发了列不存在的错误。
修复步骤:
- 删掉
employee实体中冗余的@Column(name="company") private int company;属性,使用@ManyToOne映射关联后不需要单独存储外键值,如果需要保留该属性请添加@Transient注解避免和数据库字段映射冲突。 - 修改
comp属性的@JoinColumn配置为@JoinColumn(name="company"),让外键关联指向表中实际存在的company字段。 - 可选优化:HQL可以写得更规范避免解析异常,修改为:
List results=session.createQuery("select emp.comp.annual_sales from employee emp").list();
如果需要开启双向关联,取消company实体中@OneToMany注解的注释即可,不开启双向关联也不影响当前查询的正常执行。
内容的提问来源于stack exchange,提问作者Choi
相关产品推荐
相关产品推荐

