加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

使用hibernate从数据库获取下一个序列值

发布时间:2022-10-21 14:32:57 所属栏目:MySql教程 来源:互联网
导读: 使用hibernate从数据库获取下一个序列值
问题描述:
我有一个实体,该实体具有必须从序列中设置的NON-ID字段。目前MySQL 序列使用,我获取序列的第一个值,将其存储在客户端,然后根据该值

使用hibernate从数据库获取下一个序列值

问题描述:

我有一个实体,该实体具有必须从序列中设置的NON-ID字段。目前MySQL 序列使用,我获取序列的第一个值,将其存储在客户端,然后根据该值进行计算。

但是,我正在寻找一种“更好”的方法。我实现了一种获取下一个序列值的方法:

public Long getNextKey()
{
    Query query = session.createSQLQuery( "select nextval('mySequence')" );
    Long key = ((BigInteger) query.uniqueResult()).longValue();
    return key;
}

但是,这种方式会大大降低性能(?5000个对象的创建速度降低了3倍-从5740ms到13648ms)。

我试图添加一个“假”实体:

@Entity
@SequenceGenerator(name = "sequence", sequenceName = "mySequence")
public class SequenceFetcher
{
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence")
    private long                      id;
    public long getId() {
        return id;
    }
}

但是,该方法也不起作用(返回的所有ID为0)。

有人可以建议我如何使用Hibernate有效地获取下一个序列值吗?

编辑: 经过调查,我发现,调用Query query = session.createSQLQuery( "selectnextval('mySequence')" );远远大于使用更低效@GeneratedValue-因为Hibernate的 某种方式

设法减少取的次数访问顺序来描述时@GeneratedValue。

例如,当我创建70,000个实体时(因此从同一序列中获取了70,000个主键),我得到了所需的一切。

但是 ,hibernate只发出 1404 select nextval('local_key_sequence')命令。注意:在数据库方面,缓存设置为1。

如果我尝试手动获取所有数据,将需要我70,000个选择,因此性能上会有巨大差异。有谁知道Hibernate的内部功能,以及如何手动重现它?

下一节:JPA / Hibernate删除实体有时不起作用

我有以下通常正常工作的代码:public void delete(T object){ EntityManager em = getPersistence().createEntityM ...

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!