我有一个如下实体(Getter和Setter被忽略)。
@Entity
@Table(name = "users")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@GenericGenerator(name = "idGenerator", strategy = "increment")
@Id
@GeneratedValue( generator = "idGenerator")
@Column(name = "id", updatable = false, unique = true, nullable = false)
private Integer id;
@Column(name = "name")
private String name;
}
我需要的是:
1)id == null(未分配id),策略是自动增量
2)id!= null(已分配id),持久保存具有指定值的实体
对于我的代码,id生成将随时自动增加。我想知道hibernate是否可以通过配置支持上述要求?或者我需要手动实现它?我正在使用的数据库是MySql。
提前致谢。
答案 0 :(得分:2)
您正在描述auto increment column:
AUTO_INCREMENT属性可用于为新行生成唯一标识...
CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES ('dog'),('cat'),('penguin'), ('lax'),('whale'),('ostrich'); SELECT * FROM animals;
返回:
+----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | lax | | 5 | whale | | 6 | ostrich | +----+---------+没有为AUTO_INCREMENT列指定值,因此MySQL会自动分配序列号。您还可以向列显式指定0以生成序列号。如果列声明为NOT NULL,则还可以为列分配NULL以生成序列号。当您将任何其他值插入AUTO_INCREMENT列时,该列将设置为该值并重置序列,以便下一个自动生成的值按顺序从最大列值开始。