【问题标题】:Duplicate id with mysql in hibernate on google app engine在谷歌应用引擎上的休眠中与mysql重复ID
【发布时间】:2016-11-30 21:34:54
【问题描述】:

我的设置是 Appengine + hibernate + mysql

有时应用会抛出异常:

org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions:键“PRIMARY”的重复条目“466”

不幸的是,这种情况并不经常发生,也不容易复制。

我的实体是这样构造的:

import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;


@Entity
@Table(name = "Game")
public class Game {

    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    private Long srvId;
    ...

我知道 Google App Engine 不支持 Identity 作为生成器策略。我注意到的是,重新部署应用程序后问题消失了。然后它可以在一段时间后再次发生。奇怪的是,在 GAE 的日志中,我可以看到在异常期间没有其他请求继续进行,即使重试请求,15 秒后再次抛出异常。 (请求之间的时间为 15 秒)1 分钟后问题消失。

它与缓存有关吗? (我没有配置任何)或应用引擎上的多个sql实例?

【问题讨论】:

    标签: java mysql hibernate google-app-engine


    【解决方案1】:

    这个你可能已经想到了,这个答案可能太基础了,但是你的方法是不是使用了mysql中的自增功能呢?

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    

    This answer 对@GeneratedValue 注释进行了细分。另外,我没有在您的代码中看到 strategy= 属性,我在大多数其他示例中都看到了它。

    【讨论】:

    • 经过调查,我注意到现在自动增量已添加到 SQL 模式中。在密钥旁边没有 AUTOINCREMENT 之前。谢谢!
    猜你喜欢
    • 2011-09-18
    • 2012-10-31
    • 2011-08-03
    • 1970-01-01
    • 2010-10-26
    • 2023-03-13
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多