Java id在数据库中自动递增,但在hibernate的实体中未设置

Java id在数据库中自动递增,但在hibernate的实体中未设置,java,spring,hibernate,postgresql,Java,Spring,Hibernate,Postgresql,我有一个自动生成的id字段: @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="id") private long id; 在我的实体中,我将序列生成定义为: @Entity @SequenceGenerator(name = "sequence", sequenceName = "pes_id_seq") @Table(name = "pes") 现在,当我使用以下命令保存实体

我有一个自动生成的id字段:

@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private long id;
在我的实体中,我将序列生成定义为:

@Entity
@SequenceGenerator(name = "sequence", sequenceName = "pes_id_seq")
@Table(name = "pes")
现在,当我使用以下命令保存实体时:

repository.save(entity);
并尝试获取新插入行的id,如下所示:

System.out.println(entity.getId());

它始终显示1。但是,在数据库中,id(串行字段)按预期递增。

存储库。save
将保存作为参数传递的实体,但不会更新/合并(JPA术语)传递的参数。 举个例子吧

repository.save(entity);

System.out.println(entity.getId());
将始终在保存前返回实体id的值。您必须获取由存储库新创建/管理的返回对象,该对象在保存后将具有正确的Id

entity = repository.save(entity);

System.out.println(entity.getId());

您能否提供一个完整的代码示例,从实体实例化到测试ID是否不同?是否刷新会话以提交保存?当我尝试使用repository.getSession().flush()刷新时,它显示会话已关闭@Jenschauder:剩下的代码和往常一样。我认为问题在于id生成。我认为您需要
GenerationType.SEQUENCE
generator=
条目,IIRC。检查文档以了解详细信息。好的,repository.save(entity)返回void,如果我使用hibernates的save,它返回Serializable(不知道)…但它不返回entity。我不确定这里的repository是什么意思。如果它是Spring JPA数据api。然后它将返回实体。如果您引用hibernate会话(我希望变量名更改为session),那么它将返回新创建的Id。因此,您将一直获得新创建的Id。