您的实体的ID是长(基本类型)还是长(对象类型)?
选择什么?长还是长?
@Entity
@Table(name = "COUNTRY")
public class CountryEntity implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
private long id;
@Column(name = "NAME")
private String name;
@Column(name = "CURRENCY")
private String currency;
@Column(name = "PEOPLE")
private Long people;
@Column(name = "SIZE")
private Long size;
public CountryEntity() {
}
答案 0 :(得分:23)
我认为让Long更好,因为通过检查null
值来检查实体是否具有持久性身份更为正确(在MySQL中,您可以使用值为0的ID)。还有一些像Spring这样的库在它们的逻辑中基于Long类型的ID(默认情况下)。有关示例,请参阅此implementation。
原语的一小优点:它占用的空间更少。
PS:两者都是正确的&根据JPA规范支持,这个问题的答案以某种方式基于意见。
答案 1 :(得分:4)
我更喜欢Long,原因很简单,如果你让数据库为你生成id(你应该),你可以通过检查id==null
来判断最近实例化的CountryEntity对象是否仍然存在。如果使用long,则id将始终具有非空值(最初为0),这将在持久化实体时更改。
答案 2 :(得分:1)
我可能会因此而受到抨击,但两者都没有。除非您计划对它们执行数学计算,否则Id字段不应在Java中表示为数字类型。使用String代替,当你的id超过Long的容量时,你不会遇到溢出问题。另外,尝试将24位数的Long序列化为JSON,您将遇到麻烦。