簡體   English   中英

如何在 hibernate 和 postgres 上同步 id?

[英]How to sync id on hibernate and postgres?

也許有人面臨同樣的情況? 在我的項目中,我有兩個服務。 我使用 liquebase 創建數據庫表。 創建權限表時,我立即使用插入在其中輸入 4 個值。 一切都在嗡嗡作響。 因此,現在在第二個服務(管理面板)中,我創建了一個允許您創建權限的 apish。 當我嘗試在已經有 4 條記錄的權限表中創建記錄時,我收到錯誤ERROR: duplicate key value violates unique constraint "permissions_pkey" 如果我發出請求 5 次,則會發生錯誤,記錄是第 5 次添加的。 提前致謝)

<insert tableName="permissions">
  <column name="id" value="1"/>
  <column name="name" value="USERS_READ"/>
</insert>
<insert tableName="permissions">
  <column name="id" value="2"/>
  <column name="name" value="USERS_GET"/>
</insert>
<insert tableName="permissions">
  <column name="id" value="3"/>
  <column name="name" value="USERS_CREATE"/>
</insert>
<insert tableName="permissions">
  <column name="id" value="4"/>
  <column name="name" value="USERS_DELETE"/>
</insert>
public class Permission {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id; 
}

如果它是標識列,則不必在 liquibase 腳本中為id列提供值。 讓數據庫為您計算它們。 畢竟,這就是使用標識列的全部意義所在。

如果您需要稍后在腳本中以某種方式引用 id,請查找從您正在使用的 RDBMS 獲取最后插入的 id 的方式,通常會有類似LAST_INSERTED_ID()的方法。 或者,使用name列查找插入的行。

您正在使用生成類型 IDENTITY,映射到 postgres 中的數據類型串行。 當您要插入從管理面板創建的權限時,postgres 使用一個序列,從您的描述中的 1 開始,並且 id 1 到 4 已經被您的手動插入使用。 將 id 從您的手動插入中刪除,或者在您的管理面板創建的實體上明確設置 id,例如。 查詢表中當前使用的最大 id。 考慮更改生成類型。

暫無
暫無

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

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