簡體   English   中英

java如何設置自增屬性

[英]java how to set an auto increment attribute

在我的實體中,我有以下代碼:

@Entity
@Table(name = "product")
class Product{   
...
    @GeneratedValue(strategy=GenerationType.AUTO)
    int rank;
}

當我嘗試保存產品類型的對象時,在數據庫中,排名值始終為 0

我可以設置 id 自動遞增以外的屬性嗎?

@Alain Cruz 提出的解決方案就是這樣! 但這是答案的一半......你將需要:

1) 像這樣修改你的rank屬性:

@Generated(GenerationTime.INSERT)
@Column(name = "column_name", insertable = false)
Long rank;

2) 創建一個監控Products實體的插入前觸發器,檢查是否 rank 為null ,您將更改該值以使用所需序列返回的新值...

我已經完成了這種使用存儲在我的數據庫中的 SQL 函數生成特殊代碼的方法......您可以在此處找到更多信息

有多種方法可以自動生成值,但它們必須始終在@Id字段上完成。 如果未聲明,則您將無法自動增加您的價值。

有不同類型的策略可以增加您的 ID。 在此博客中,您可以了解更多關於它們的信息。 對於您的示例, IDENTITY 應該可以解決問題。

@Entity
@Table(name = "product")
class Product{   

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    int rank;
}

更新

經過一些研究,Hibernate 現在似乎允許自動增加其他非 id 字段,但它為此使用了另一個注釋。 我還沒有嘗試過,但也許它可以工作。 以防您的等級不是您的 ID。

@Generated(GenerationTime.INSERT)
@Column(name = "column_name", insertable = false)
int rank;
@Entity
@Table(name = "product")
class Product{   
...
    @GeneratedValue(strategy=GenerationType.IDENTITY )
    int rank;
}

以下應該有效,如果無效,請嘗試之后的操作:

@Entity
@Table(name = "product")
class Product{   
...
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int rank;
}

public int getId() {
    return id;
}



public void setId(int id) {
    this.id = id;
}

如果這不起作用,請轉到您的數據庫並將排名變量設置為自動遞增。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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