@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;
}
}
你会选择什么,为什么?
答案 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;
}