[英]Hibernate Auto Increment ID
我有一個使用帶注釋的hibernate的j2ee應用程序。 如何在我的pojo類中注釋Id字段以將其設置為自動增量或自動生成。 並且在添加bean時,我將該字段留在我的bean null中嗎?
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
並且在持久化時將其保留為null
( 0
)。 (如果使用Integer
/ Long
包裝器,則為null
)
在某些情況下, AUTO
策略被解析為SEQUENCE
而不是IDENTITY
或TABLE
,因此您可能希望手動將其設置為IDENTITY
或TABLE
(取決於底層數據庫)。
似乎SEQUENCE
+ 指定了適合您的序列名稱 。
做到如下: -
@Id
@GenericGenerator(name="kaugen" , strategy="increment")
@GeneratedValue(generator="kaugen")
@Column(name="proj_id")
public Integer getId() {
return id;
}
您可以使用任意名稱而不是kaugen。 它工作得很好,我可以在控制台上看到下面的查詢
Hibernate: select max(proj_id) from javaproj
Hibernate: insert into javaproj (AUTH_email, AUTH_firstName, AUTH_lastName, projname, proj_id) values (?, ?, ?, ?, ?)
FYI
使用帶有mysql * auto_increment *列的netbeans New Entity Classes ,可以創建一個帶有以下注釋的屬性:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
@NotNull
private Integer id;
這讓我得到了同樣的錯誤,說列不能為空,所以我只是刪除@NotNull anotation,留下屬性null,它就可以了!
Hibernate定義了五種類型的標識符生成策略:
AUTO - 標識列,序列或表,具體取決於底層數據庫
TABLE - 保存id的表
IDENTITY - 標識列
序列 - 序列
身份拷貝 - 身份從另一個實體復制
使用表的示例
@Id
@GeneratedValue(strategy=GenerationType.TABLE , generator="employee_generator")
@TableGenerator(name="employee_generator",
table="pk_table",
pkColumnName="name",
valueColumnName="value",
allocationSize=100)
@Column(name="employee_id")
private Long employeeId;
有關更多詳細信息,請查看鏈接 。
如果您有一個要自動遞增的數字列,則可以選擇直接設置columnDefinition
。 這樣做的好處是,即使在沒有休眠的情況下使用該模式,模式也會自動生成該值。 這可能會使您的代碼特定於db:
import javax.persistence.Column;
@Column(columnDefinition = "serial") // postgresql
在尋找為Informix表的策略這太問題的情況下任何人“顛簸”的時候是PK型系列 。
我發現這有用......作為一個例子。
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "special_serial_pk")
private Integer special_serial_pk;
為此,請確保在執行session.SaveOrUpdate時傳遞special_serial_pk列的值為NULL 。
在我的情況下,我使用JSON進行HTML POST ,如此...
{
"special_serial_pk": null, //<-- Field to be incremented
"specialcolumn1": 1,
"specialcolumn2": "I love to code",
"specialcolumn3": true
}
使用帶有mysql auto_increment列的netbeans New Entity Classes,使用以下hibernate.hbm.xml創建一個屬性:id是auto increment
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.