我有一個奇怪的問題。 我在我的JPA應用程序中使用表生成策略。直到最近,我使用Toplink持久性提供者作爲JPA實現。一切正常。 剛纔我添加了TopLink(Table per Class Inheritance)不支持的一些繼承特性,所以我不得不轉移到EclipseLink。 所有的工作都很好,除了ID生成。 下面是我用我所有的唯一ID代碼示例:@TableGenerator不能使用EclipseLink JPA 2.0
@Id
@TableGenerator(name="INCOME_SEQ", table="SEQUENCE_TABLE", pkColumnName="SEQUENCE_NAME",
valueColumnName="SEQUENCE_COUNT", pkColumnValue="INCOME_SEQ", allocationSize=1)
@GeneratedValue(strategy=GenerationType.TABLE, generator="INCOME_SEQ")
@Column(name = "INCOME_ID")
private Integer incomeId;
完全相同的代碼工作與Toplink的,但不與工作的EclipseLink。 我得到的錯誤是:
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'INCOME_ID' cannot be null
Error Code: 1048
這似乎是表代在所有未使用...
這裏是我的MySQL數據庫的表說明:表 名稱:SEQUENCE_TABLE
+----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| SEQUENCE_NAME | varchar(64) | NO | PRI | NULL | |
| SEQUENCE_COUNT | int(11) | NO | | 0 | |
| localized_name | varchar(128) | YES | | NULL | |
| USER_ID | int(11) | NO | MUL | 1 | |
+----------------+--------------+------+-----+---------+-------+
任何人都可以請直接給我的問題?或者至少有一種方法來獲得ID未被創建的實際原因?
編輯:這是收入階層和表結構:
+-------------------------+-------------------------------------------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------------+-------------------------------------------------------------------------------+------+-----+---------+-------+
| INCOME_ID | int(11) | NO | PRI | NULL | |
| REFERENCE_DOCUMENT_ID | varchar(32) | YES | | NULL | |
| CLIENT_ID | int(9) | NO | MUL | NULL | |
| income_date | datetime | NO | | NULL | |
| MOVEMENT_CATEGORY_ID | int(11) | NO | MUL | NULL | |
| SUM_AFTER_TAX | decimal(10,2) | YES | | 0.00 | |
| TOTAL_SUM | decimal(10,2) | NO | | NULL | |
| TAX_SUM | decimal(10,2) | NO | | 0.00 | |
| VAT_PERCENT | decimal(10,2) | NO | | NULL | |
| DESCRIPTION | varchar(100) | YES | | NULL | |
| STATUS | smallint(5) unsigned | YES | | 0 | |
| REFERENCE_DOCUMENT_TYPE | enum('MANUAL_INVOICE','MANUAL_RECEIPT','INVOICE','RECEIPT','INVOICE_RECEIPT') | YES | | NULL | |
| USER_ID | int(11) | NO | MUL | 1 | |
| UNIQUE_USER_SEQUENCE | int(10) unsigned | YES | | NULL | |
+-------------------------+-------------------------------------------------------------------------------+------+-----+---------+-------+
編輯:我跑了的EclipseLink日誌記錄級別的應用程序設置爲最優秀的,但我還是看不出什麼錯。我甚至可以看到測序被正確初始化:
[EL Finest]: 2012-11-07 20:37:00.359--ServerSession(1832413009)--Connection(1484802679)--Thread(Thread[pool-1-thread-2,5,main])--Connection released to connection pool [default].
[EL Finest]: 2012-11-07 20:37:00.405--ServerSession(1832413009)--Thread(Thread[pool-1-thread-2,5,main])--sequencing connected, state is NoPreallocation_State
[EL Finest]: 2012-11-07 20:37:00.406--ServerSession(1832413009)--Thread(Thread[pool-1-thread-2,5,main])--sequence SEQ_GEN_IDENTITY: preallocation size 1
[EL Finest]: 2012-11-07 20:37:00.406--ServerSession(1832413009)--Thread(Thread[pool-1-thread-2,5,main])--sequencing connected, state is Preallocation_Transaction_NoAccessor_State
[EL Finest]: 2012-11-07 20:37:00.406--ServerSession(1832413009)--Thread(Thread[pool-1-thread-2,5,main])--sequence RECEIPTS_SEQ: preallocation size 1
[EL Finest]: 2012-11-07 20:37:00.406--ServerSession(1832413009)--Thread(Thread[pool-1-thread-2,5,main])--sequence INCOME_SEQ: preallocation size 1
[EL Finest]: 2012-11-07 20:38:09.264--UnitOfWork(514772947)--Thread(Thread[AWT-EventQueue-1,6,main])--persist() operation called on: 555 וובה.
[EL Finer]: 2012-11-07 20:38:09.265--UnitOfWork(514772947)--Thread(Thread[AWT-EventQueue-1,6,main])--begin unit of work commit
[EL Finest]: 2012-11-07 20:38:09.288--UnitOfWork(514772947)--Thread(Thread[AWT-EventQueue-1,6,main])--Execute query DoesExistQuery(referenceClass=MovementCategories)
[EL Finest]: 2012-11-07 20:38:09.29--UnitOfWork(514772947)--Thread(Thread[AWT-EventQueue-1,6,main])--Execute query InsertObjectQuery(חש' ידנית 555 וובה)
[EL Finest]: 2012-11-07 20:38:09.291--ServerSession(1832413009)--Connection(1484802679)--Thread(Thread[AWT-EventQueue-1,6,main])--Connection acquired from connection pool [default].
[EL Finer]: 2012-11-07 20:38:09.291--ClientSession(2117615354)--Connection(1484802679)--Thread(Thread[AWT-EventQueue-1,6,main])--begin transaction
[EL Fine]: 2012-11-07 20:38:09.293--ClientSession(2117615354)--Connection(1484802679)--Thread(Thread[AWT-EventQueue-1,6,main])--INSERT INTO income (INCOME_ID, DESCRIPTION, INCOME_DATE, REFERENCE_DOCUMENT_ID, REFERENCE_DOCUMENT_TYPE, STATUS, SUM_AFTER_TAX, TAX_SUM, TOTAL_SUM, UNIQUE_USER_SEQUENCE, VAT_PERCENT, CLIENT_ID, MOVEMENT_CATEGORY_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
bind => [null, null, 2012-11-07 20:37:55.225, 555, MANUAL_INVOICE, 1, 100.0, 16.5, 116.5, null, 16.5, 334, 3]
我看到的唯一的線索是Preallocation_Transaction_NoAccessor_State
財產... 也許有人能幫助我理解這一點。在排序主鍵ID的情況下,日誌輸出應該是什麼?
Eclipselink日誌記錄在這裏描述http://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging嘗試最好的水平。 – Chris
好吧,我得到了日誌輸出(感謝那個鏈接...)。 我在主要問題 – Vova
中添加了結果它似乎並不像id使用排序,包括收入的完整類映射,還檢查是否有orm.xml覆蓋註釋,並確保您正確編譯和部署你的代碼。 – James