首页 > 解决方案 > Spring JPA CrudRepository save(Entity) 在 id 字段中返回 0

问题描述

我正在将 spring JPA/Hibernate 5 添加到一个旧项目中。我正在CrudRepository .save(Entity)对一张Mainframe/DB2桌子运行方法。该行插入得很好,但returnedEntity.getIdColumn()0其中。我真的需要 ID 进行进一步处理。有人可以帮忙吗?非常感谢!

@Entity
Table(name="MY_TABLE")
public class myClass {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID_COLUMN")
private Long idColumn;
...

}

身份是唯一有效的策略类型。这是服务类:

@Transactional
public Entiry insertEntity(Entity originalEntity) {
   return MyRepository.save(originalEntity);
}
Runner class:
Entity originalEntity = createEntity();
Entity returnedEntity = ServiceClass.insertEntity(originalEntity);
System.out.println(originalEntity.getIdColumn());
System.out.println(returnedEntity.getIdColumn());

标签: springhibernatedb2spring-data-jpa

解决方案


我的猜测是,您正试图在您的事务被刷新到数据库之前获取一个 ID。因此 JPA 不知道将分配什么 id 并返回 0。

编辑:我建议有这样的东西:

@Transactional
public Entity save( .....) {
   //some code
   repository.save(entity);
   //some code
   return entity;
}

事务将在此方法结束时刷新,并且将从该方法返回的实体应具有真实 ID。


推荐阅读