java - Hibernate 中用于自动递增 MySQL 主键的 Java 注释是什么 - @Id

标签 java mysql hibernate jpa identifier

在此代码中,我需要将 id 作为主键,并且它必须递增。
id 需要 getter 和 setter 吗?

@Entity
public class Contact {
@Id
private Integer id;
private String firstName;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

最佳答案

虽然您可以使用 GenerationType.AUTO,但这对 MySQL 和 Hibernate 5 来说不是一个好主意,因为它将默认为 TABLE 生成器,这对性能不利。

因此,尽管[它将禁用 JDBC 批量插入][3],您应该使用 IDENTITY:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

或者您可以使用 native 标识符生成器,​​它回退到 MySQL 上的 IDENTITY:

@Id
@GeneratedValue(
    strategy= GenerationType.AUTO, 
    generator="native"
)
@GenericGenerator(
    name = "native", 
    strategy = "native"
)
private Long id;

关于java - Hibernate 中用于自动递增 MySQL 主键的 Java 注释是什么 - @Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45905924/

相关文章:

java - Hibernate 4 -> 5 迁移 : NamingStrategy changes, 找不到表

java - Java(Linux)和Windows系统之间的字符编码

java - jsp中Taglib继承:include

php - 如何将我的 SQL 语句更改为准备好的(和安全的)语句?

MYSQL统计不为空的行

java - 如何在Hibernate中的HQL中编写SQL join

java - 使用 Hibernate 排除值

java - 单例规则不适用于静态成员变量

Java + gRPC : Error: A JNI error has occurred

mysql - 争论希腊字符