【发布时间】:2011-12-23 13:18:30
【问题描述】:
我已经使用 Hibernate(默认)一个 ORM 提供程序创建了一个接缝应用程序。在持久化实体时,它会引发以下错误:
Caused by: java.sql.SQLException: Field 'COUNTRY_ID' doesn't have a default value
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
它被抛出是因为主键不是在持久化实体之前由 Hibernate 生成的。
@Entity
@Table(name = "country")
public class Country implements java.io.Serializable {
private Integer countryId;
//other instance variables...
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "COUNTRY_ID", unique = true, nullable = false)
public Integer getCountryId() {
return this.countryId;
}
public void setCountryId(Integer countryId) {
this.countryId = countryId;
}
当我在 'Country' 表中进行更改时,即将 COUNTRY.COUNTRY_ID 设置为 AUTO_INCREMENT(MySQL 数据库),那么上面的代码会保留 Country 实体。即使尝试了策略
@GeneratedValue(strategy = GenerationType.IDENTITY)
如果我不将 COUNTRY_ID 设为 AUTO_INCREMENT,则会发生错误。
那么,表中的主键是否需要自动递增?如果主键在数据库表中没有标记为 AUTO_INCREMENT,为什么 Hibernate 在持久化实体之前不创建唯一主键(使用 HiLo 算法)。
提前致谢。
问候
【问题讨论】:
标签: hibernate