【问题标题】:Auto Increment like with String values in hibernate自动增量,如休眠中的字符串值
【发布时间】: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。

标签: java hibernate


【解决方案1】:

我只能说“不要这样做”。像 "str10001" 这样的字符串 ID 如何比 10001 更好?由于字符串需要更多内存和更多时间,因此不能进行优化。所以我猜你需要稍后将它传递给一些期望字符串的方法。

如果是这样,则改为传递"str" + id。动态构建字符串肯定不会使您的服务器饱和。

如果没有,请告诉我们您真正需要什么,而不是您认为可以帮助您实现它。

我很确定,Hibernate 做不到。不可能很久以前我最近检查过它,它没有任何意义(无论如何,这不是人群会要求的功能)。

【讨论】:

  • 再次嗨@maaartinus我想我被困在创建可能自己的自动生成代码,如果它自动增量会很好,但如果它真的那么微不足道,我将不得不满足于UUID带日期的随机值。再次Tnx回复,非常感谢您的回答。
猜你喜欢
  • 2011-03-25
  • 2016-09-01
  • 2011-01-01
  • 2015-06-08
  • 2014-01-27
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多