이상한 문제가 있습니다. JPA 애플리케이션에서 테이블 생성 전략을 사용하고 있습니다. 최근까지는 JPA 구현으로 Toplink 지속성 공급자를 사용했습니다. 모두 괜찮 았어. 이제 TopLink (Table per Class Inheritance)에서 지원하지 않는 상속 기능을 추가 했으므로 EclipseLink로 이동해야했습니다. 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;
정확한 동일한 코드가 상단 링크와 함께 작동하지만 EclipseLink가 작동하지 않습니다 여기에 내 모든 고유 ID에 사용하는 코드 예제입니다. 내가 할 오류 : 테이블 이름 : SEQUENCE_TABLE
다음 내 MySQL 데이터베이스에 테이블의 설명이다Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'INCOME_ID' cannot be null
Error Code: 1048
그것은 전혀 사용하지 않는 테이블 생성처럼 보인다 ...
+----------------+--------------+------+-----+---------+-------+
| 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