JPA中如何指定主键生成策略?

在JPA中可以通过@GeneratedValue注解指定主键的生成策略。它有以下四种生成策略:

  1. AUTO:由底层数据库自动生成主键,Oracle使用序列,MySQL使用自增字段。
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
  1. IDENTITY:由底层数据库自动生成主键,针对支持自动增长的数据库,MySQL使用自动增长字段。
@Id  
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
  1. SEQUENCE:使用数据库序列生成主键,Oracle序列。
@Id  
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_gen")
@SequenceGenerator(name = "seq_gen", sequenceName = "user_seq")
private int id;  
  1. TABLE:使用数据库表模拟序列生成主键,PORTABLE在不同数据库间可移植。
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "tab_gen")
@TableGenerator(name = "tab_gen", table = "id_gen", pkColumnName = "gen_name", 
                                                    valueColumnName = "gen_val", 
                                                    pkColumnValue = "user_id")
private int id;

上述策略可以通过指定@SequenceGenerator或@TableGenerator注解一起使用,以便控制主键生成的序列名或表信息。
选择合适的主键生成策略,有助于我们实现高性能和可移植的应用。熟练配置不同的主键生成策略,可以使应用支持多种数据库,增强应用的兼容性。