我已經使用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數據庫的最佳策略? –