Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @TableGenerator不使用EclipseLink JPA 2.0_Java_Mysql_Jpa_Eclipselink - Fatal编程技术网

Java @TableGenerator不使用EclipseLink JPA 2.0

Java @TableGenerator不使用EclipseLink JPA 2.0,java,mysql,jpa,eclipselink,Java,Mysql,Jpa,Eclipselink,我有一个奇怪的问题。 我在JPA应用程序中使用表生成策略。直到最近,我还使用Toplink持久性提供程序作为JPA实现。一切都很好。 刚才我添加了一些TopLink不支持的继承特性(每个类的表继承),所以我不得不转到EclipseLink。 除了ID生成之外,所有工作正常。 下面是我用于所有唯一ID的代码示例: @Id @TableGenerator(name="INCOME_SEQ", table="SEQUENCE_TABLE", pkColumnName="SEQUENCE_NAME",

我有一个奇怪的问题。 我在JPA应用程序中使用表生成策略。直到最近,我还使用Toplink持久性提供程序作为JPA实现。一切都很好。 刚才我添加了一些TopLink不支持的继承特性(每个类的表继承),所以我不得不转到EclipseLink。 除了ID生成之外,所有工作正常。 下面是我用于所有唯一ID的代码示例:

@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
似乎根本没有使用表生成

以下是my MySql数据库中的表说明: 表名称:序列表

+----------------+--------------+------+-----+---------+-------+
| 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日志记录级别设置为finest,但我仍然看不到任何错误。我甚至可以看到序列正确初始化:

  [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\u Transaction\u NoAccessor\u State
属性。。。
也许有人能帮我理解这一点。如果主键ID已排序,日志输出应该是什么

检查日志中的错误以及SQL失败的原因

在表def中,还有其他几列吗

USER_ID不是您告诉JPA的东西,也不是空的,所以我假设它可能导致失败


如果仍然存在问题,请提供更多详细信息。

找到了解决方案,希望对更多人有用: 出于某种原因,我为我的持久性单元设置了以下持久性配置设置:

persistenceMap.put(PersistenceUnitProperties.ID_VALIDATION,"NONE");
显然,在EclipseLink中关闭ID验证也会关闭ID生成


感谢所有试图帮忙的人

我包含的错误片段显示,SQL错误告诉我们,插入数据时,主键列income_id为NULL。user_id列的默认值为“1”,因此不定义它不是问题,它只是默认值为“1”。我应该提到,当我使用Toplink作为JPA提供者时,完全相同的代码(使用完全相同的DB)工作得非常好。至于更多日志记录-你知道我如何提取EclipseLink的更详细日志吗?这里介绍了EclipseLink日志记录,请尝试最高级。好的,我得到了日志记录输出(感谢链接…)。我在主要问题中添加了结果。id似乎没有使用排序,包括Income的完整类映射,还检查是否有orm.xml覆盖注释,并确保正确编译和部署代码。