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

标签 java mysql hibernate google-app-engine

我的设置是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 不支持将身份作为生成器策略。我注意到的是,重新部署应用程序后问题就消失了。然后一段时间后它可能会再次发生。奇怪的是,在 GAE 日志中我可以看到,在异常期间没有其他请求继续进行,即使重试请求,15 秒后也会再次引发异常。 (15 秒是请求之间的时间)1 分钟后问题消失。

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

最佳答案

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

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

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

关于java - 在谷歌应用程序引擎上的 hibernate 中使用mysql重复id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40898658/

相关文章:

java - 如何在java中创建同一类对象的多个引用

php - 我的更新查询有什么问题?

mysql - 从 rstudio docker 内部连接到主机 mysql 数据库

java - hibernate 映射

java - OneToOne Find 上的 JPA/Hibernate 双选

java - 如何在JBoss 4.2.3 GA上显示汉字

Java、MySQL 连接被输入数据终止

java - 存储与映射中的键相对应的多个值

php - Dropdownlist php不显示来自mysql数据库的数据

java - JPA 获取连接实体返回递归获取循环