專案選型 jBPM 4.0 GA 版,官方未提供 SQL Server 建表腳本。基於 Hibernate 跨資料庫特性,自行編寫 create.sql、drop.sql 及 Hibernate 方言配置,測試通過但遇兩大約束問題。
org.hibernate.exception.ConstraintViolationException: could not insert: [HistoryProcessInstanceImpl]
Caused by: java.sql.SQLException: 當 IDENTITY_INSERT 設置為 OFF 時,不能為表 'JBPM4_HIST_PROCINST' 中的標識列插入顯式值。
原因:JBPM4_HIST_PROCINST.DBID_ 定義為 bigint IDENTITY,但 Hibernate 嘗試顯式插入值。
修正:移除 IDENTITY 屬性,改為 bigint not null,由 Hibernate 管理主鍵生成策略(如 native 或 sequence)。
org.hibernate.exception.ConstraintViolationException: could not insert: [ExecutionImpl]
Caused by: java.sql.SQLException: 違反了 UNIQUE KEY 約束 'UQ__JBPM4_EXECUTION__7D8391DF'。不能在對象 'dbo.JBPM4_EXECUTION' 中插入重復鍵。
原因:JBPM4_EXECUTION.ID_ 有唯一索引,SQL Server 不允許唯一列存在多個 NULL 值(部分流程實例該列為 NULL)。
修正:移除該唯一約束,或改為過濾索引(WHERE ID_ IS NOT NULL),視業務影響評估決定。
JBPM4_LOCK)💡 提示:生產環境建議優先使用官方支援的資料庫(PostgreSQL、Oracle、MySQL、DB2),減少 DDL 移植風險。若必須用 SQL Server,請嚴格執行遷移腳本版本管理與回滾演練。