Java 是否自动生成时间戳作为数据库的Id?

Java 是否自动生成时间戳作为数据库的Id?,java,database,timestamp,Java,Database,Timestamp,@Id属性通常能够自动生成数据库主键Id。 我希望有一个时间戳是Id(我可以确保不会有2个相同的时间戳) 您是直接将时间戳设置为变量的属性,还是在构造函数中初始化它,或者在构造函数中作为参数传递它 @Entity public class MyDomain implements Serializable { @Id private Timestamp timestamp = new Timestamp(new Date().getTime()); public MyDo

@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;
    }
}

您会选择什么,为什么?

我不会这样做,使用时间戳作为ID。ID字段不应该有任何业务值(至少在我目前的经验中),我会添加另一个时间戳行。但这只是我的观点。

我会避免使用时间戳作为主键。对于一个独特的专栏来说,这太笨拙了。另外,您真的想在其他表中使用这样一个繁琐的字段作为外键吗

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

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

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

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

一方面,Java只使用毫秒作为时间戳;大多数数据库默认为纳秒(或仅秒)——app/db之间存在不匹配是丢失某些东西的好方法。如果突然收到大量请求,通过时间戳将数据库限制为id是限制数据库吞吐量的一个好方法。使用时间戳记录日期/时间信息。使用id(通常为整数)唯一标识行。