【发布时间】:2014-05-19 02:23:06
【问题描述】:
好吧,我想知道是否有一种更合适的方法来处理使用字符串值生成自动 id,我的第一个想法是创建一个自动增量 id,我们可以调用它 auto_id 然后在保存新实体之前,我将查询db 中的最新数据以获取 id,然后我将 1 添加到我的自动生成值列中,我分配的名称为 stringValue+(id+1) 虽然我担心它会如何影响保存该实体的性能需要在 db 中获取和保存两个访问权限......就像我之前的问题一样,是否有更合适的方法来处理这种情况?
如果你想用我的问题澄清一些事情,也很抱歉我的英国人,请提前询问..
这是我用于休眠注释的 AttributeModel 代码
@Component
@Entity
@Table(name="attribute_info")
public class AttributeModel {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="attr_id", nullable=false, unique=true)
private int id;
@Column(name="attr_name")
private String name;
@Column(name="attr_desc")
private String desc;
@Column(name="attr_active")
private int active;
@Column(name="attr_abbr")
private String abbr;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name="stats_id", referencedColumnName="stats_id")
private BaseStatisticModel baseStats;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public int getActive() {
return active;
}
public void setActive(int active) {
this.active = active;
}
public String getAbbr() {
return abbr;
}
public void setAbbr(String abbr) {
this.abbr = abbr;
}
public BaseStatisticModel getBaseStats() {
return baseStats;
}
public void setBaseStats(BaseStatisticModel baseStats) {
this.baseStats = baseStats;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
【问题讨论】:
-
我确信这是可能的,但为什么要使用基于字符串的 ID 而不是整数或长整数?
-
其实我用的不是id而是实体码。
-
@BrianJohnLee 你能显示一些代码吗?至少实体?
-
嗨@RAS 我已经编辑了我的问题并添加了我想要设置此属性的名称的部分代码让我们说 str01021 当然是唯一的。
-
我认为你不应该让它自动生成,至少不应该由服务器生成。改用散列算法,例如,guava 和 apache.commons.codec 有一些 DigestUtils 可以使用。或者添加一个很长的字段并让数据库自动生成它,让它成为你的 id。