[英]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.