我使用的是Java 1.7和Hibernate 4.1.9。我对Hibernate相对较新,所以如果我遗漏任何关键信息,请告诉我。我的班级javax.persistence.Entity
名为Meeting
,其中包含以下内容:
@Column(name = "ballot_id")
private Long ballotId;
public Long getBallotId() {
return ballotId;
}
public void setBallotId(Long ballotId) {
this.ballotId = ballotId;
}
我正在尝试构建一个这样的查询:
Query query = session.createQuery("from Meeting m where m.ballotId=:ballotId");
query.setParameter("ballotId", someLongValue);
meeting = (Meeting) query.uniqueResult();
但我收到org.hibernate.exception.SQLGrammarException: Unknown column 'meeting0_.ballotId' in 'field list'
错误。似乎在构建这样的查询时,Hibernate不检查指示数据库列名称与对象的属性名称不同的注释。有没有其他方法可以做到这一点,还是我需要为此添加一些东西?也许我错过了什么,或者HQL错了?
谢谢!
答案 0 :(得分:1)
看起来更像是需要移动注释:
private Long ballotId;
@Column(name = "ballot_id")
public Long getBallotId() {
return ballotId;
}
public void setBallotId(Long ballotId) {
this.ballotId = ballotId;
}
根据此answer,您的HQL应该没问题。
答案 1 :(得分:0)
例外:
org.hibernate.exception.SQLGrammarException: Unknown column 'someTable.someColumn' in 'field list'
org.hibernate.exception.SQLGrammarException: Column "someTable.someColumn" not found;
问题:列(不是字段!)someColumn
在表中不存在(由someTable
实体引用)。
确保它存在。
如果你有@Column(name = "someColumn")
注释,请确保它已被阅读(它是否放在正确的位置?字段或 getter?不是两者都有)。在配置AnnotationConfiguration
时,您必须使用SessionFactory
才能使用它们。另外,检查您是否还有xml
映射文件,它可能会覆盖注释。