EclipseLink忽略ID生成的策略-PostgreSQL [英] EclipseLink ignores strategy for id generation - PostgreSQL

查看:71
本文介绍了EclipseLink忽略ID生成的策略-PostgreSQL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请查看我的应用程序配置。正如答案中所标记的那样,由于EclipseLink的错误,我已将目标数据库更改为数据库。我的实体ID上有@GeneratedValue(strategy = GenerationType.IDENTITY)。在数据库中,此列是串行类型。当我尝试将新对象保存到数据库时,得到以下日志:

Please look at my apps configuration. As it is marked in the answer, I have changed target-database to "Database" due to the bug of EclipseLink. I have @GeneratedValue(strategy=GenerationType.IDENTITY) on my entities id. In the database this column is of serial type. When I try to save a new object to the database I get following log:


2015-11-08T23:37:20.748 + 0100 |更精简:获得客户:133317409
2015-11-08T23:37:20.760 + 0100 |更精:TX绑定到tx mgr,status = MARKED_ROLLBACK
2015-11-08T23:37:20.761 + 0100 | Finer :获取工作单元:1890544759
2015-11-08T23:37:20.762 + 0100 |最细致的:调用的persist()操作:com.amleto.server.model.entities.FacebookDebug@7e0498c2。
2015-11-08T23:37:20.763 + 0100 | Finer:TX beginTransaction,status = MARKED_ROLLBACK
2015-11-08T23:37:20.764 + 0100 | Finest:执行查询DataModifyQuery(name = SEQ_GEN_IDENTITY sql = UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + #PREALLOC_SIZE WHERE SEQ_NAME = #SEQ_NAME)
2015-11-08T23:37:20.766 + 0100 |最细:从连接池获取连接[默认]。
2015-11-08T23:37:20.767 + 0100 |最精细:重新连接到外部连接池
2015-11-08T23:37:20.771 + 0100 |精细:UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT +? SEQ_NAME =哪里?
bind => [1,SEQ_GEN_IDENTITY]
2015-11-08T23:37:20.883 + 0100 |警告:本地异常堆栈:
异常[EclipseLink-4002](Eclipse Persistence Services-2.6 .1.v20150605-31e8258):org.eclipse.persistence.exceptions.DatabaseException
内部异常:org.postgresql.util.PSQLException:错误:关系序列不存在
位置:8
错误代码:0
调用:UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT +? SEQ_NAME =哪里?
bind => [1,SEQ_GEN_IDENTITY]

2015-11-08T23:37:20.748+0100|Finer: client acquired: 133317409 2015-11-08T23:37:20.760+0100|Finer: TX binding to tx mgr, status=MARKED_ROLLBACK 2015-11-08T23:37:20.761+0100|Finer: acquire unit of work: 1890544759 2015-11-08T23:37:20.762+0100|Finest: persist() operation called on: com.amleto.server.model.entities.FacebookDebug@7e0498c2. 2015-11-08T23:37:20.763+0100|Finer: TX beginTransaction, status=MARKED_ROLLBACK 2015-11-08T23:37:20.764+0100|Finest: Execute query DataModifyQuery(name="SEQ_GEN_IDENTITY" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + #PREALLOC_SIZE WHERE SEQ_NAME = #SEQ_NAME") 2015-11-08T23:37:20.766+0100|Finest: Connection acquired from connection pool [default]. 2015-11-08T23:37:20.767+0100|Finest: reconnecting to external connection pool 2015-11-08T23:37:20.771+0100|Fine: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ? bind => [1, SEQ_GEN_IDENTITY] 2015-11-08T23:37:20.883+0100|Warning: Local Exception Stack: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.1.v20150605-31e8258): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: org.postgresql.util.PSQLException: ERROR: relation "sequence" does not exist Position: 8 Error Code: 0 Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ? bind => [1, SEQ_GEN_IDENTITY]

很明显,这是错误的。您有任何想法吗?

Clearly something is wrong. Do you have any idea?

推荐答案

您对先前问题的解决方案不是解决方案,应该重新考虑。使用数据库通用平台意味着您无法利用PostgreSQL的数据库特定功能,例如身份,并且默认使用内部未创​​建的序列。

Your solution to your previous problem isn't a solution and should be revisited. Using the 'database' generic platform means you cannot take advantage of database specific features of PostgreSQL, such as identity and is defaulting to a sequence internally that hasn't been created.

除非您愿意创建序列,否则唯一可行的方法是设置。

Unless you are willing to create a sequence, the only way this will work will be to have set.

这篇关于EclipseLink忽略ID生成的策略-PostgreSQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆