当前位置: 首页 > 面试题库 >

Postgres中的GeneratedValue

相旭
2023-03-14
问题内容

我的实体类映射如下:

@Entity
@Audited
@Table(name="messages_locale")
public class Locale {

    @Id
    @GeneratedValue
    @Getter @Setter //Project Lombok's annotations, equal to generated getter and setter method
    private int id;
        (...)

我创建干净的新数据库和属性:

<prop key =“ hibernate.hbm2ddl.auto”>创建</ prop>

为什么在创建数据库后,地狱(抱歉,此错误浪费了将近两天),我的postgres数据库中有一个序列?

CREATE SEQUENCE hibernate_sequence
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 2
  CACHE 1;
ALTER TABLE hibernate_sequence
  OWNER TO postgres;

我不想有一个序列,我只是想自动增加自动生成的值。


问题答案:

在PostgreSQL中,自动增量使用SERIAL伪类型进行处理。您在执行时使用此类型CREATE TABLE

现在要点-这种SERIAL伪类型创建一个序列。PostgreSQL使用创建的序列来处理自动增量。该id列的默认值为-
nextval('your_sequence_name')

在Hibernate中针对User实体:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "users_seq_gen")
@SequenceGenerator(name = "users_seq_gen", sequenceName = "users_id_seq")
public Long getId() {
     return id;
}

在这里阅读:

http://www.postgresql.org/docs/8.4/static/datatype-numeric.html#DATATYPE-
SERIAL

http://www.neilconway.org/docs/sequences/



 类似资料:
  • 问题内容: 我必须使用分布在不同机器上且都在运行linux的几个postgresql数据库进行模拟。 我已经成功地从源代码编译并构建了postgresql,我也可以运行服务器,但是当我尝试使用此命令创建新的数据库时: 我收到此错误: 其中giulio是我用于访问所有计算机的用户名。 在某些机器上它可以工作,而在其他机器上则不能。我真的无法弄清楚问题的根源。我想这与postgres的访问控制有关。

  • 在我的一个项目中,我有一个表,其中保存了某种设备的固件更新信息。最初,任何固件更新进程都处于排队状态。更新过程可能有其他状态值,例如正在进行、已完成、失败。对于单个设备,可能存在状态为“已完成”和“已失败”的多行(已完成的更新过程,最终状态!)。但在任何时候,处于排队或正在进行状态的每个设备都必须只有一个更新过程——新固件的推出应该只适用于没有“活动/非最终”更新过程的设备。我试图用Postgre

  • 问题内容: 我是Postgres的新手。我刚刚从这里开始学习它。我从一条选择语句中发现了COLLATE“ C” 我想知道COLLATE“ C”会做什么? 问题答案: 归类用于对字符串(文本)进行排序,例如按字母顺序,是否区分大小写,如何处理带有重音符号的字母等。COLLATE“ C”告诉数据库完全不要使用归类。如果他们正在设计一个数据库来保存不同语言的数据,则可以使用此功能。从技术上讲,COLLA

  • 问题内容: 我正在尝试使用pq驱动程序对Go中的PostgreSQL数据库执行以下查询: 哪里过去了。 我尝试了很多不同的事情,例如: 结果是。我也试过 这也失败了 我也尝试直接传递一片整数/字符串并得到。 那么如何在Go中执行此查询? 问题答案: 预先构建SQL查询(防止SQL注入) 如果要为每个值生成一个带有参数占位符的SQL字符串,则立即生成最终SQL会更容易。 请注意,由于值是s,因此存在

  • 问题内容: 如果要在日期上加上5天,可以使用以下功能: 但是,我的表有一个名为的字段,我想将其添加到我的create_ts中。像这样的东西: 这是行不通的。我怎样才能在postgresql中做到这一点? 问题答案: 只需将值乘以一个间隔即可: 从Postgres 9.4开始,使用 函数可以更轻松地完成此操作:

  • 我在迁徙中见过这个 据我所知,uuid是一个基于某些RFC的长唯一字符串,这使得db(在本例中为pg)可以将列类型作为uuid 我的问题是-为什么需要这种类型的列而不仅仅是字符串列?是替换常规整数id列并使用uuid作为id吗? 使用uuid作为id而不仅仅是让字符串类型列包含uuid有什么好处吗?