自动生成时间戳作为数据库的ID?

时间:2014-01-09 10:28:18

标签: java database timestamp

@Id属性通常具有自动生成数据库主键ID的能力。 我想有一个时间戳是Id(我可以确保没有2个相同的时间戳)。

您是将时间戳直接设置为变量的属性,还是在构造函数中初始化它,还是将其作为参数传递给构造函数?

@Entity
public class MyDomain implements Serializable {
    @Id
    private Timestamp timestamp = new Timestamp(new Date().getTime());

    public MyDomain() {
        this.timestamp = new Timestamp(new Date().getTime());
    }

    public MyDomain(Timestamp timestamp) {
        this.timestamp = timestamp;
    }
}

你会选择什么,为什么?

2 个答案:

答案 0 :(得分:3)

我不这样做,使用时间戳作为ID。 id文件根本不应该有任何商业价值(至少根据我的经验到目前为止),我会添加另一个时间戳行。但那只是我的意见。

答案 1 :(得分:1)

我会避免使用时间戳作为主键。对于一个独特的列来说,这很笨拙。您是否真的想在其他表中使用像这样的繁琐字段作为外键?

如果此时间戳确实需要是唯一的,那么您应该将时间戳放在其自己的字段中并使用唯一约束。

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"timestamp"})})
public class MyDomain implements Serializable {

  @Id
  @Column(name = "id")
  private Long id;

  @Column(name = "timestamp")
  public Timestamp timestamp;
}