生成了我的实体id,当我使用DAO而不是Spring Data JPA时,它工作得很好。
@Id
@Column(name = TABLE_COLUM_NAME_ID)
@GeneratedValue
private int id;
现在我已经开始使用Spring Data JPA,在调用repository.save(myboject)
或repository.saveAndFlush(myobject)
之后,我调用myobject.getId()
,但是id从未被填充。
我搜索了我的数据库,对象在数据库中,id是正确的。有人知道为什么在我调用save()
后id没有设置吗?我使用entitymanager.save()
时没有问题。
8条答案
按热度按时间jmo0nnb31#
我相信这篇文章回答了你的问题:
Why to use returned instance after save() on Spring Data JPA Repository?
repository.save()
方法实际上返回一个新对象,如JPAentityManager.merge()
,并且返回的对象将具有ID集。dgenwo3n2#
像这样试试
然后在调用
getId()
之后;xxb16uws3#
1.应该使用
repository.saveAndFlush();
方法:MyObject savedObject= repository.saveAndFlush(newObject);
1.在实体对象说明中,应将以下属性(
@GeneratedValue(strategy = GenerationType.AUTO)
)添加到相关字段(id
):qij5mzcb4#
此方法返回保存的
id
现在您有了
id
。sz81bmfz5#
尝试为
@GeneratedValue
指定策略,例如gmxoilav6#
我终于明白了。虽然保存方法是void,但你可以给它设置一个变量。(?)
aiazj4mn7#
我猜您的Service方法上没有@Transactional注解。
mwkjh3gx8#
上面的答案都不能解决这个问题,但是设置下面的注解起作用了。
对于上下文,我使用mysql并将ID设置为以下定义