在谷歌应用引擎上的hibernate中使用mysql重复id

时间:2016-11-30 21:34:55

标签: java mysql hibernate google-app-engine

我的设置是Appengine + hibernate + mysql

有时app会抛出异常:

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分钟后问题消失。

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

1 个答案:

答案 0 :(得分:0)

你可能已经想过这个,这个答案可能太基础了,但你的方法是否在mysql中使用自动增量功能?

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

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