簡體   English   中英

MySQL自動增量設置為22378; 新記錄分配的ID = 1

[英]MySQL auto-increment set to 22378; new record assigned id = 1

MySQL(InnoDB)自動增量似乎已正確配置,但調用

em.persist(entry)

導致錯誤:

異常[EclipseLink 4002](Eclipse Persistence Services 2.5.0.v20130507 3faac2b):org.eclipse.persistence.exceptions.DatabaseException

內部異常:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:鍵“ PRIMARY”的條目“ 1”重復,錯誤代碼:1062

要保留的實體(條目)使用主鍵entry_id,通過該鍵將其連接到庫存表。

@Entity
@Table(name="entries")
public class Entry implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 8144553107778486945L;

/*
 * PRIMARY KEY & ID FOR THE CASE
 */
@Id
@Column(name="ENTRY_ID")
@GeneratedValue(strategy = GenerationType.AUTO)        // was TABLE
    private Long entry_id;

@Version
private Integer version;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "entry",
        cascade={CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name="entry_id")
private List<InventoryEntry> inventory =
    new ArrayList<InventoryEntry>();

運行查詢:

select max(entry_id) FROM entries

產量:

max(entry_id)
22377

正在運行:

show table status from chambers like ‘entries’

MySQL命令行客戶端中的下一個自動遞增編號為:

22378

問題:為什么將id = 1分配給新記錄?

據我了解,數據庫啟動時自動遞增將重置為max(id)+1,並且查詢結果證實確實如此。 我應該添加該表以前使用的:strategy = GenerationType.TABLE,並且使用此策略首先出現Duplicate Entry'1'錯誤(這就是我采用自動增量策略的原因)。 我已經刪除了序列表。 我還刪除了數據庫,並從Java類重新生成了架構,從而從備份中重新填充了數據。 一切都無濟於事。

描述ENTRIES將entry_id行的配置顯示為:

字段:ENTRY_ID,類型:bigint(20),空值:否,鍵:優先級,默認值:空值,額外:自動增量

該行被索引為PRIMARY。 因此,一切似乎都井井有條。

我應該補充一點,該Web應用程序利用了運行在Glassfish 4.0社區服務器(最近從Glassfish 3.1.2.2嵌入式服務器升級)中的MySQL InnoDB數據庫。 Eclipse Kepler是Windows 7 64位平台上的IDE。

我已經用盡了我微薄的能力的極限。 任何幫助將不勝感激。

使用@GeneratedValue(strategy = GenerationType.IDENTITY)而不是@GeneratedValue(strategy = GenerationType.AUTO)

因為:

IDENTITY策略還在提交期間為每個新實體對象生成一個自動值。 不同之處在於,每個類型層次結構都管理一個單獨的標識生成器,因此生成的值僅在每個類型層次結構中都是唯一的。

您會看到此問題,因為MySQL不會為行生成ID,EclipseLink會為行生成ID。 您可以嘗試使用GenerationType.IDENTITY強制JPA使用標識列(這將強制從數據庫中重新讀取以更新Java對象),或者可以還原以前的狀態; 我不知道EclipseLink如何實現GenerationType.AUTO

暫無
暫無

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

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