spring - 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());
解决方案
我的猜测是,您正试图在您的事务被刷新到数据库之前获取一个 ID。因此 JPA 不知道将分配什么 id 并返回 0。
编辑:我建议有这样的东西:
@Transactional
public Entity save( .....) {
//some code
repository.save(entity);
//some code
return entity;
}
事务将在此方法结束时刷新,并且将从该方法返回的实体应具有真实 ID。
推荐阅读
- python - for k in data:如何在这个循环中达到 k+1 in data
- javascript - 在表格单元格之间循环,读取不同的数据
- javascript - 使用 react refs 来关注兄弟元素
- python - Django 如何处理 AutoField 主键的增量?
- laravel - 我无法将字符串添加到数组的所有值
- c# - 如何使用 libgit2sharp 正确取消暂存文件
- angular - 将 Angular 8 应用程序迁移到 9 的奇怪问题
- python - 我如何找到在同一个列表中并且具有相同类但在 selenium 中的按钮上有不同文本的按钮元素?
- sql-server - Exclude time from datetime value in another row
- java - Converting a String to Set