Java 使用属性名为';它与它不同';s列名

Java 使用属性名为';它与它不同';s列名,java,hibernate,Java,Hibernate,我正在使用Java1.7和Hibernate4.1.9。我对Hibernate比较陌生,所以如果我遗漏了任何关键信息,请告诉我。我的类中有一个名为Meeting的javax.persistence.Entity,包含以下内容: @Column(name = "ballot_id") private Long ballotId; public Long getBallotId() { return ballotId; } public void setBallotId(Long bal

我正在使用Java1.7和Hibernate4.1.9。我对Hibernate比较陌生,所以如果我遗漏了任何关键信息,请告诉我。我的类中有一个名为
Meeting
javax.persistence.Entity
,包含以下内容:

@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.sqlgrammareexception:“字段列表”中的未知列“meeting0\uuu0.ballotId”
错误。似乎在构建这样的查询时,Hibernate不会检查表示数据库列名与对象的属性名不同的注释。有没有其他方法可以做到这一点,或者有什么我需要补充的?也许我错过了什么,或者HQL搞错了


谢谢

看起来更像是需要移动批注:

private Long ballotId;

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

public void setBallotId(Long ballotId) {
    this.ballotId = ballotId;
}
根据这一点,您的HQL应该是正常的。

例外:

  • org.hibernate.exception.sqlgrammareexception:“字段列表”中的未知列“someTable.someColumn”

  • org.hibernate.exception.sqlgrammareexception:未找到“someTable.someColumn”列

问题:表中不存在列(而不是字段!)
someColumn
(由
someTable
实体引用)

确保它存在。


如果您有一个
@Column(name=“someColumn”)
注释,请确保它已被读取(它是否放置在正确的位置?字段getter?不是两者都有)。在配置
会话工厂
时,必须使用
注释配置
,才能使它们正常工作。另外,请检查您是否还有
xml
映射文件,它可能会覆盖注释。

谢谢您的回复Alexandre。我以前尝试过,但它产生了以下错误:
org.hibernate.QueryException:无法解析属性:ballot\u id
,这似乎是一种倒退。注释是针对列名的,我必须搜索,因为我仍在使用hbm.xml文件。在您的情况下,您的HQL应该保持ballotId,并且只更改getter的注释。Alexandre,这就是问题所在!我在其中一个getter上留下了注释,因此Hibernate只使用getter注释,而忽略了变量声明上的注释。acdcjunior,你说得对,它确实有效。这只是其中的一个场景,因为它相当大,所以发布整个类会很冗长,但是我必须让任何人看到问题。非常感谢大家!它存在。问题是表列没有Java使用的命名约定。因此,尽管有注释
@Column(name=“ballot\u id”)
,但它仍然会查找名为
ballotId
的列,它们不需要遵循任何约定,我现在已经使用
@Column(name=“ballot\u id”)
进行了测试,它可以正常工作。你确定这个注释是
javax.persistence.Column
?我的意思是Java对变量有一个命名约定,默认情况下Hibernate在引用数据库列时使用变量名,除非这个
@Column
注释指定。无论如何,正如上面的评论中提到的,问题最终是getter上有一个注释,这导致变量声明上的注释被忽略。哦,是的,字段名遵循bean约定。我的意思是(数据库中表的)列名可以是任何名称。您只需使用
@Column(name=“database\u crazy\u Column\u name”)
进行注释即可。