SQLGrammarException:无法执行查询:找不到列?
Posted
技术标签:
【中文标题】SQLGrammarException:无法执行查询:找不到列?【英文标题】:SQLGrammarException: could not execute query: Column not found? 【发布时间】:2020-08-17 15:43:38 【问题描述】:我有以下hibernate
查询字符串:
String queryString = "select \r\n" +
"cms.my_status_id as 'myStatusId',\r\n" +
"cms.status_label as 'statusLabel',\r\n" +
"csl.status_id as 'companyStatusLabel'\r\n" +
"from "+client+".corresponding_status cms \r\n" +
"join "+client+".company_status_label csl on csl.status_id = cms.my_status_id";
我的对应实体是:
@Entity(name = "corresponding_status")
@Table(name = "corresponding_status")
public class CorrespondingStatus implements Serializable
@Id
@JsonProperty
@Column(name = "my_status_id")
private Integer myStatusId;
// varchar(255)
@JsonProperty
@Column(name = "status_label")
private String statusLabel;
@JsonProperty
@Transient
private String companyStatusLabel;
但是,当我运行查询时,我得到:
Column 'my_status_id' not found
即使它肯定在数据库中。
这里有什么问题?
【问题讨论】:
你能告诉我们最后的查询吗? @jarlh 我该怎么做?谢谢 将您的日志输出粘贴到问题中\r\n
完全没有必要,可能会引起问题
您的CorrespondingStatus
实体似乎与任何其他实体没有关系。你为什么要在这里加入?
【参考方案1】:
在 HQL 中,您必须使用属性而不是数据库列名。将您的 HQL 更改为
String queryString = "select \r\n" +
"cms.myStatusId as 'myStatusId',\r\n" +
"cms.statusLabel as 'statusLabel',\r\n" +
"csl.status_id as 'companyStatusLabel'\r\n" +
"from "+client+".corresponding_status cms \r\n" +
"join "+client+".company_status_label csl with csl.status_id = cms.myStatusId";
编辑: 您可能需要相应地更改 company_status_label 实体
EDIT2:更改为 WITH
【讨论】:
HQL 连接没有ON
子句。【参考方案2】:
我建议使用criteria API,而不是手动构建 JPA 查询。您上面的查询将从:
String queryString = "select \r\n" +
"cms.my_status_id as 'myStatusId',\r\n" +
"cms.status_label as 'statusLabel',\r\n" +
"csl.status_id as 'companyStatusLabel'\r\n" +
"from "+client+".corresponding_status cms \r\n" +
"join "+client+".company_status_label csl on csl.status_id = cms.my_status_id";
类似于:
Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<Entity> cq = cb.createQuery(Entity.class);
Root<Entity> root = cq.from(Entity.class);
cq.select(root);
Query<Entity> query = session.createQuery(cq);
List<Entity> results = query.getResultList();
【讨论】:
以上是关于SQLGrammarException:无法执行查询:找不到列?的主要内容,如果未能解决你的问题,请参考以下文章
org.hibernate.exception.SQLGrammarException:无法插入
org.hibernate.exception.SQLGrammarException: could not execute query
org.hibernate.exception.SQLGrammarException:无法提取 ResultSet
无法打开 JPA EntityManager 进行事务处理;嵌套异常是 org.hibernate.exception.SQLGrammarException:无法获取 JDBC 连接