我将春季JPA / Hibernate 5添加到一个旧项目中.我正在针对Mainframe / DB2表运行CrudRepository .save(Entity)方法.该行已插入,但returnEntity.getIdColumn()中包含0.我确实需要ID进行进一步处理.有人可以帮忙吗?非常感谢你!
@Entity
Table(name="MY_TABLE")
public class myClass {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID_COLUMN")
private Long idColumn;
...
}
身份是唯一有效的策略类型.
这是Service类:
@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.