0

names,password,username,email在数据库中存储值,我希望自动创建id一个主列,它的值从 1 开始并自动递增。我正在创建一个类user,它有我写的数据成员

    @Entity
     public class User extends Model {

    @Id(start)
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    @Required
    @MinLength(value=4)
    public String username;
    @Required
    public String name;



    @Required
    @MinLength(value=6)
    public String password;

    @Required
    @Email
    public String email;

    public User(String name,String username,String password,String email)
    {
        this.name=name;
        this.username=username;
        this.password=password;
        this.email=email;
    }


}

我在数据库中存储值,它正在存储值并在数据库中创建 id 列,就像这个数据库的屏幕截图一样

数据库映像

在此屏幕截图中,它正在创建随机值并将该值存储在id列中,129 141 161 162但我不想要这个值,我希望该值以1, 2,3这样的开头。

请任何人知道我必须为此使用哪个注释来自动创建列并以 1 开始值?怎么做

给我一些想法。

4

2 回答 2

1

GenerationType.AUTO 的问题在于它生成的 ID 在数据库级别是唯一的,并且永远不会被回收。这意味着在 table1 中,如果 id 的 3、4 和 5 存在于其他表中,您的 id 字段可能会从 2 增加到 6。

尝试使用生成策略 GenerationType.IDENTITY (或 GenerationType.SEQUENCE 已在另一个答案中解释)。身份生成策略管理每个类型层次结构的唯一 id,因此每个表的 id 基本上是顺序的,即 1、2、3、4 等....

ObjectDB 网站上 有一个很棒的教程以获取更多信息。

于 2014-06-04T10:41:28.890 回答
1

不知道自动创建列,但这里是如何自动填充它:

首先在数据库SEQUENCE中创建序列,而不是在实体类中创建序列:

@Id
@Column(name = "id", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_increment")
@SequenceGenerator(name = "id_increment", sequenceName = "seq_name", allocationSize = 1)    
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}

当您将记录添加到数据库列时,将用序列 +1 中的数字填充

而且你不需要提前设置 id 字段,它将自动设置

于 2013-08-13T11:28:31.567 回答