JPA @GeneratedValue(strategy = GenerationType.AUTO)不适用于MySQL

Luc*_*uke 7 java mysql hibernate jpa java-ee

我有一个实体应该自动从数据库中获取id.我使用MySQL所以我希望注释@GeneratedValue(strategy=GenerationType.AUTO)可以解决到IDENTITY幕后而不是SEQUENCE.但是,当我试图坚持一个新的实体时,它失败了,说hibernate_sequence没有找到.它显然使用序列策略而不是身份.

我已将persistence.xml中的方言设置为: org.hibernate.dialect.MySQL5InnoDBDialect

Hibernate版本4.2.0.CR1

我读到的所有资源都说,在使用auto as strategy连接到MySQL时应该使用身份.

Vla*_*cea 6

如果您使用增强的标识符:

 properties.put("hibernate.id.new_generator_mappings", "true");
Run Code Online (Sandbox Code Playgroud)

然后使用SequenceStyleGenerator,并且因为MySQL不支持序列,所以它将回退到TABLE生成器.这就是为什么它会查找"hibernate_sequence",这是默认的序列表名称.

如果您不使用新生成器,则使用"本机"生成策略,该策略将查找:

public Class getNativeIdentifierGeneratorClass() {
    if ( supportsIdentityColumns() ) {
        return IdentityGenerator.class;
    }
    else if ( supportsSequences() ) {
        return SequenceGenerator.class;
    }
    else {
        return TableHiLoGenerator.class;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以它选择:

  • 身分
  • 序列
  • 希洛

取决于您当前的数据库功能.

在这种情况下,MySQL将始终选择身份.有关更多详细信息,请查看此文章.