使用query.setParameter,其属性名称与其列名不同

时间:2013-05-16 01:48:42

标签: java hibernate

我使用的是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错了?

谢谢!

2 个答案:

答案 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映射文件,它可能会覆盖注释。