首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JPA2.0+Spring3.0中避免ID生成并发?

如何在JPA2.0+Spring3.0中避免ID生成并发?
EN

Stack Overflow用户
提问于 2013-01-15 13:33:13
回答 4查看 1.2K关注 0票数 1

在我的web应用程序中,我获得了JPA ID生成中的Concurrency Problem。我使用Table生成策略。我已经得到了JPA ID生成的Concurrency Issue

如何在JPA ID生成中避免Concurrency Problem?什么是更好的ID生成方式?Spring3.0有办法避免它吗?

实际上,如果我使用其他id生成策略,我会担心数据库依赖性。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-15 22:26:15

EclipseLink通常会使用单独的事务来分配生成的ids。如果您使用JTA DataSource,那么它就不能使用,除非您还在persistence.xml中提供了非jta数据源。

另外,如果您提前触发了一个数据库事务(比如刷新),那么表id的生成将必须使用事务连接,除非您指定了序列连接池。

请看,http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/p_connection_pool_sequence.htm#BABIDAGH

票数 4
EN

Stack Overflow用户

发布于 2013-01-17 02:04:19

在Oracle中,您可以使用自主事务处理并创建存储过程,如下所示:

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE GETAPPLICATIONSEQUENCE (
name IN VARCHAR,
offSet IN NUMBER,
seqValue OUT INTEGER
)
AS PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    SELECT sequence_value INTO seqValue FROM sequence_table WHERE sequence_name = name FOR UPDATE;
    UPDATE sequence_table SET sequence_value = sequence_value + offSet WHERE sequence_name = name;
    COMMIT;
END;

现在,只要您能够从数据库代码中调用此存储过程,就可以传入所需序列的名称和偏移量(以在一个块中获取多个值)并获取序列值。您必须查看SQL Server是否具有与自治事务等效的功能。

票数 2
EN

Stack Overflow用户

发布于 2013-01-15 16:58:34

正如该链接所说,一些JPA提供者使用单独的连接来实现价值生成之类的事情(DataNucleus JPA当然是这样做的)。所以这就回避了这个问题。取决于您的JPA提供程序(您没有说明)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14331695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档