当id为null时自动增加但是当id不为空时对hibernate应用指定的值?

时间:2016-03-04 07:29:58

标签: java mysql hibernate

我有一个如下实体(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。

提前致谢。

1 个答案:

答案 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列时,该列将设置为该值并重置序列,以便下一个自动生成的值按顺序从最大列值开始。