Java id在数据库中自动递增,但在hibernate的实体中未设置
我有一个自动生成的id字段: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
@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。