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(通常为整数)唯一标识行。