标签: nextval

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

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

但是,我正在寻找一种"更好"的方式来做到这一点.我已经实现了一种获取下一个序列值的方法:

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

但是,这种方式会显着降低性能(〜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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这种方法也不起作用(所有返回的Ids都是0).

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

编辑:经过调查,我发现调用的Query query = session.createSQLQuery( "select nextval('mySequence')" );效率远低于使用@GeneratedValue- 因为Hibernate 以某种方式设法减少访问所描述的序列时的提取次数@GeneratedValue.

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

但是,Hibernate只发出1404个 select nextval ('local_key_sequence') …

sql hibernate sequence nextval

31
推荐指数
3
解决办法
13万
查看次数

PostgreSQL下一个序列的值?

我在我的Codeigniter网站上使用PostgreSQL.我正在使用杂货店crud来添加,编辑和删除操作.在进行编辑或添加时,我想根据内容的ID动态重命名上传的文件.我可以使用杂货crud的callback_after_upload功能来做到这一点.

在添加新内容时,我想要内容的下一个ID.我尝试使用nextval()函数,但序列随之增加.如何在不使用nextval()函数的情况下获取序列的最后一个值?

或者有一种简单的方法可以做到这一点吗?

postgresql codeigniter sequence nextval postgresql-9.1

30
推荐指数
5
解决办法
9万
查看次数

从PostgreSQL序列中选择多个ID

是否有简洁的方法在1个查询中多次为PostgreSQL序列选择nextval?这将是唯一返回的值.

例如,我想做一些非常短暂和甜蜜的事情:

SELECT NEXTVAL('mytable_seq', 3) AS id;
Run Code Online (Sandbox Code Playgroud)

得到:

 id  
-----
 118
 119
 120
(3 rows)
Run Code Online (Sandbox Code Playgroud)

postgresql select nextval

21
推荐指数
2
解决办法
9214
查看次数

如何在.NET Entity Framework中获取Oracle下一个序列值?

我有一个web api post方法,在我的Oracle数据库中的表中插入一个新行.我遇到了表的主键,这是一个序列值.我如何my_primary_key_seq.nextval在Entity Framework中做?目前此代码有效,但当通过旧的.net webform插入新行时,它将违反PK唯一约束,该webform使用序列下一个值作为下一个主键.

decimal nextPK = context.FORMPPs.OrderByDescending(p => p.PPID).FirstOrDefault().PPID + 1;
item.PPID = nextPK;
context.FORMPPs.Add(item);
int result = context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

.net entity-framework sequence oracle11g nextval

7
推荐指数
2
解决办法
1万
查看次数

postgresql nextval生成现有值

我不得不从rails app上的基于mySql的ruby迁移到使用postgresql.到目前为止没有问题,但我不知道如何解决它.

数据的迁移带来了id,而postgresql现在遇到了现有ID的问题:我不清楚它在哪里获得用于确定nextval基数的值:它肯定不是最高值专栏,虽然您可能认为这是一个好主意.无论如何,它现在与现有的id值发生冲突.从标准RoR迁移创建的id列定义为

not null default nextval('geopoints_id_seq'::regclass)
Run Code Online (Sandbox Code Playgroud)

是否有一些地方可以将其作为基础使用的价值入侵?这个问题现在可能出现在20个左右的表格中:我可以使用

'select max(id) from <table_name>' 
Run Code Online (Sandbox Code Playgroud)

但这似乎使自动增量柱的想法毫无意义.

如何最好地处理?

postgresql ruby-on-rails auto-increment nextval

6
推荐指数
2
解决办法
3513
查看次数

在jpa中调用序列的下一个值

我有一个类映射为实体,以将其持久保存在数据库中.我有一个id字段作为主键,因此每次持久化对象时,都会从序列"myClass_pk_seq"中检索id的值,该代码类似于以下代码.

@Entity
@Table(name="myObjects")
public class MyClass {
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sequence")
    @SequenceGenerator(name="sequence", sequenceName="myClass_pk_seq", allocationSize=1)
    @Column(name="myClassId")
    private Integer id;

    private Integer code;


    ...
}
Run Code Online (Sandbox Code Playgroud)

我需要在"code"属性中创建类似于id的东西.我需要有一个序列,所以我可以为代码分配序列的下一个值(如果用户想要保留它但不保留数据,则保留该值).我的意思是用户将看到该字段,如果他不知道输入什么,他可以按下按钮并在屏幕上接收下一个可能的值(他可以接受或不接受).如何在不保留非主键字段的数据的情况下获取JPA中定义的序列的下一个值(并增加其值)?

我只想要一个方法在与"code"字段关联的序列上调用nextval,并返回该值.使用注释在JPA中执行此操作的最佳方法是什么?

谢谢.

java hibernate jpa sequence nextval

5
推荐指数
1
解决办法
2万
查看次数

获取标识列的 nextval

在我的 postgreSQL DB 应用程序中,我有时需要在运行插入之前检索序列的下一个值。\n我曾经通过向我的用户授予对此类序列的 \xe2\x80\x9cusage\xe2\x80\x9d 权限来实现此目的并使用 \xe2\x80\x9cnextval\xe2\x80\x9d 函数。\n我最近开始使用 \xe2\x80\x9cGENERATED BY DEFAULT AS IDENTITY\xe2\x80\x9d 列作为主键,我仍然能够检索nextval 作为超级用户,但我无法将此类权限授予其他用户。我的错误在哪里\xe2\x80\x99?

\n\n

这是一个例子:

\n\n
-- <sequence>\nCREATE SEQUENCE public.apps_apps_id_seq\n    INCREMENT 1\n    START 1\n    MINVALUE 1\n    MAXVALUE 9223372036854775807\n    CACHE 1;\n\nALTER SEQUENCE public.apps_apps_id_seq\n    OWNER TO postgres;\n\nGRANT USAGE ON SEQUENCE public.apps_apps_id_seq TO udocma;\n\nGRANT ALL ON SEQUENCE public.apps_apps_id_seq TO postgres;\n-- </sequence>\n\n-- <table>\nCREATE TABLE public.apps\n(\n    apps_id integer NOT NULL DEFAULT nextval(\'apps_apps_id_seq\'::regclass),\n    apps_born timestamp without time zone NOT NULL DEFAULT now(),\n    apps_vrsn character varying(50) COLLATE pg_catalog."default",\n    apps_ipad character varying(200) COLLATE pg_catalog."default",\n    apps_dscr character …
Run Code Online (Sandbox Code Playgroud)

postgresql identity sequence nextval sql-grant

5
推荐指数
0
解决办法
4779
查看次数

如何通过NHibernate从oracle序列中获取NextVal

我正在使用c#.net 4.0并使用NHibernate与Oracle DB进行通信.你会想到一些简单的事情,因为这已经在某个地方得到了解决,但遗憾的是它没有.我需要Oracle序列中的NextVal.我不需要将其作为Id或主键的一部分插入数据库.我只需要在c#侧使用下一个val.

有人可以帮我解决xml映射和C#文件(或链接)来实现这一目标.

谢谢.

就像是

int NextValueOfSequence = GetNextValueofSequence();

public int GetNextValueOfSequence()
{

// Access NHibernate to return the next value of the sequence.

}
Run Code Online (Sandbox Code Playgroud)

oracle nhibernate sequence nextval

4
推荐指数
3
解决办法
6167
查看次数

串行类型在postgresql中只生成偶数或奇数

我想为串行类型设置一些约束,它只产生偶数或奇数.

postgresql auto-increment nextval

1
推荐指数
1
解决办法
1294
查看次数

在 PL/pgSQL 中 INSERT 后获取默认序列值

我有一张桌子。我在 plpgsql 中编写了一个函数,将一行插入到该表中:

INSERT INTO simpleTalbe (name,money) values('momo',1000) ;
Run Code Online (Sandbox Code Playgroud)

该表有serial一个名为 的字段id。我希望在插入行后在函数中知道新行收到的 id。

我想使用:

select nextval('serial');
Run Code Online (Sandbox Code Playgroud)

在插入之前,有没有更好的解决方案?

postgresql plpgsql nextval sql-insert sql-returning

1
推荐指数
1
解决办法
3660
查看次数

为什么在PostgreSQL中删除表中的一行时,以后插入的行的ID号不是连续的?

我创建下表

CREATE TABLE dogs (
  id serial,
  name VARCHAR(15),
  age integer;
Run Code Online (Sandbox Code Playgroud)

我有这样的桌子

                                  Table "public.birds"
 Column  |         Type          |                     Modifiers                      
---------+-----------------------+-------------------------------------    
 id      | integer               | not null default nextval('birds_id_seq'::regclass)
 name    | character varying(25) | 
 age     | integer               | 
Run Code Online (Sandbox Code Playgroud)

我插入两行

INSERT INTO dogs (name, age) 
VALUES ('puffy', 13),
 ('fluffy', 15);
Run Code Online (Sandbox Code Playgroud)

桌子现在看起来像这样

  id |  name  | age 
 ----+--------+-----
   1 | puffy  |  13
   2 | fluffy |  15
 (2 rows)
Run Code Online (Sandbox Code Playgroud)

然后我删除id = 2的行

DELETE FROM dogs WHERE id = 2;
Run Code Online (Sandbox Code Playgroud)

然后添加另一行

INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql nextval

1
推荐指数
1
解决办法
923
查看次数