2013-05-16 40 views
0

我正在使用Java 1.7和Hibernate 4.1.9。我对Hibernate相对来说比较新,所以如果我遗漏了任何关键信息,请告诉我。我在我的课叫做Meeting包含此有javax.persistence.Entity使用属性名称不同于列名的query.setParameter

@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?

谢谢!

回答

1

看起来更像你需要将你的注释:本answer和您的HQL应该是好

private Long ballotId; 

@Column(name = "ballot_id") 
public Long getBallotId() { 
    return ballotId; 
} 

public void setBallotId(Long ballotId) { 
    this.ballotId = ballotId; 
} 

+0

感谢您的回复亚历山大。我曾尝试过,但它会产生此错误:'org.hibernate.QueryException:无法解析属性:ballot_id',这似乎是退后一步。 –

+0

@KevinLawrence做了一个更新,希望它有帮助! –

+1

非常奇怪,这可以帮助,但该字段中的注释应该工作... – acdcjunior

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")注释,确保其得到读取(是放置在正确的位置?场消气?不是两个)。在配置SessionFactory以使其工作时,您必须使用AnnotationConfiguration。另外,请检查您是否还有xml映射文件,它可能会覆盖注释。

+0

它存在。问题在于表列没有Java使用的命名约定。因此,尽管有注释'@Column(name =“ballot_id”)',它仍然在寻找一个名为'ballotId'的列。 –

+0

他们不需要遵循任何约定,我现在用'@Column(name =“ballot_id”)',它的工作原理。你确定这个注释是'javax.persistence.Column'吗? – acdcjunior

+0

我的意思是Java有一个变量的命名约定,默认情况下,Hibernate在引用数据库列时使用变量名,除非这个'@ Column'注释指定。无论如何,正如上面评论中所提到的那样,问题最终是因为在getter上有一个注释,导致变量声明的注释被忽略。 –

相关问题