在插入数据之前停止Doctrine查询nextval



我正在使用带有postgres数据库的Doctrine。我的主键是按顺序设置的,就像这样:

/**
* @ORMEntity()
*/
class Thing
{
/**
* @var int
* @ORMColumn(type="integer")
* @ORMGeneratedValue()
* @ORMId()
*/
protected $id;

我坚持这样一个新的实体:

$thing = new Thing();
$em->persist($thing);
$em->flush();

当我这样做时,查询日志显示条令正在调用SELECT NEXTVAL('thing_id_seq'),以便在执行INSERT查询之前为新实体生成ID。

如果我插入100个实体,它将调用SELECT NEXTVAL('thing_id_seq')100次。(我知道像这样的大容量插入应该直接用SQL完成,但你明白我的意思。(

有没有办法阻止Doctrine单独查询生成ID(然后让INSERT查询返回id(,或者这就是它的工作方式?

我想让postgres自动生成序列值可能会使一些事情复杂化,我只是想知道这是否可能/支持。

附言:我没有使用Symfony,但我过去也使用过,所以我很乐意接受我可以调查的任何基于Symfony的答案。

PostgreSQL中自动递增列的等价物是"SERIAL"类型。但大多数人都在使用序列,因为它可以更改/重置/。。。序列,而您对SERIAL类型没有太多控制。您还可以将序列下一个值分配给列默认值,如下所示:

CREATE TABLE test (
id smallint NOT NULL DEFAULT nextval('test_id_seq')
);

如果你喜欢在你的Doctrine列中使用SERIAL类型,你可以用标记你的id属性

@ORMGeneratedValue(strategy="IDENTITY")

相关内容

  • 没有找到相关文章

最新更新