我已经使用Hibernate(默认)ORM提供程序创建了接缝应用程序。在坚持一个实体,它抛出以下错误:Hibernate @GeneratedValue在持久化实体之前不会生成主键
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_ID如AUTO_INCREMENT(MySQL数据库),那么上面的代码仍然存在国家实体。即使尝试策略后
@GeneratedValue(strategy = GenerationType.IDENTITY)
如果我不使COUNTRY_ID为AUTO_INCREMENT,则会发生错误。
那么,是否有必要在表中自动增加主键?为什么在数据库表中未将主键标记为AUTO_INCREMENT的情况下,在保持实体之前,Hibernate不会创建唯一的主键(使用HiLo算法)。
在此先感谢。
问候
感谢您的意见。因此,Hibernate(GenerationType.AUTO)为GenerationType.IDENTITY选择MySQL的生成策略,我们需要在id列上自动增加。但是,随着应用程序的增长,GenerationType.IDENTITY的性能相对较差。哪一个是用于MySQL数据库的最佳策略? –