簡體   English   中英

休眠自動增量ID

[英]Hibernate Auto Increment ID

我有一個使用帶注釋的hibernate的j2ee應用程序。 如何在我的pojo類中注釋Id字段以將其設置為自動增量或自動生成。 並且在添加bean時,我將該字段留在我的bean null中嗎?

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

並且在持久化時將其保留為null0 )。 (如果使用Integer / Long包裝器,則為null

在某些情況下, AUTO策略被解析為SEQUENCE而不是IDENTITYTABLE ,因此您可能希望手動將其設置為IDENTITYTABLE (取決於底層數據庫)。

似乎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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM