Java 休眠:单个@Id不工作

Java 休眠:单个@Id不工作,java,mysql,hibernate,Java,Mysql,Hibernate,我得到了以下Java类 @Entity @Table(name="years") public class Year implements Serializable { @Id @Column(name = "year", nullable = false, unique = true, length = 4) private int year; @Id @Column(name = "ayear", nullable = false, unique = true, length =

我得到了以下Java类

@Entity
@Table(name="years")
public class Year implements Serializable {

 @Id
 @Column(name = "year", nullable = false, unique = true, length = 4)
 private int year;
 @Id
 @Column(name = "ayear", nullable = false, unique = true, length = 4)
 private int ayear = 0;

 @Column(name="sum_carbs", nullable=false)
 private double sum_carbs = 0;
 ...
}
当我从类和数据库中删除'ayear'属性时,hibernate正在抛出

org.hibernate.TypeMismatchException:为类database.databaseObjects.Year提供了错误类型的id。应为:类java.lang.Integer,获得类database.databaseObjects.Year

但是对于数据库中的@Id和representation字段,除了我有一个讨厌的无用的DB字段外,其他一切都按预期工作

年份表的SQL代码

CREATE TABLE `years` (
`year` int(4) NOT NULL,
`sum_carbs` double NOT NULL DEFAULT '0',
`avg_carbs` double NOT NULL DEFAULT '0',
`min_carbs` double NOT NULL DEFAULT '9999999999',
`max_carbs` double NOT NULL DEFAULT '0',
`count_carbs` int(11) NOT NULL DEFAULT '0',
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `years` ADD PRIMARY KEY (`year`);

请检查数据库中的ID列名是否不正确。我猜你的列名不是'year'。谢谢你的建议,但我检查了多次,但我添加了表的SQL是因为你的CREATE语句缺少主键约束?@SarathChandra sry我忘了将主命令添加到我的帖子中,但我在应用程序中使用了它。但是很好的提示。看起来Hibernate混淆了列名和类名。当将列名视为
year
时,它将其视为类。能否尝试将该列重命名为
year\u id
,看看是否有帮助?请检查数据库中的id列名是否不正确。我猜你的列名不是'year'。谢谢你的建议,但我检查了多次,但我添加了表的SQL是因为你的CREATE语句缺少主键约束?@SarathChandra sry我忘了将主命令添加到我的帖子中,但我在应用程序中使用了它。但是很好的提示。看起来Hibernate混淆了列名和类名。当将列名视为
year
时,它将其视为类。能否尝试将该列重命名为
year\u id
,看看是否有帮助?