Spring数据jpa保存无法获取id

Gre*_*rey 23 jpa spring-mvc spring-data spring-data-jpa

生成我的实体ID,当我使用DAO而不是Spring数据JPA时它工作正常.

@Id
@Column(name = TABLE_COLUM_NAME_ID)
@GeneratedValue
private int id;
Run Code Online (Sandbox Code Playgroud)

现在我已经开始使用Spring数据JPA,在我打电话之后repository.save(myboject),或者repository.saveAndFlush(myobject),我打电话myobject.getId().但是id从未填充过.

我搜索了我的数据库,对象在数据库中,ID正确.有谁知道为什么我打电话后没有设置id save()?我用的时候没问题entitymanager.save().

wrs*_*der 15

我相信这篇文章回答了你的问题:

为什么在Spring Data JPA Repository上的save()之后使用返回的实例?

repository.save()方法实际上返回一个新对象,如JPA entityManager.merge(),返回的对象是将设置ID的对象.


NPK*_*PKR 11

试试这个

myboject = repository.save(myboject);
repository.flush();
Run Code Online (Sandbox Code Playgroud)

然后打电话给getId();

  • 问题是MyEntity requestEntity; savedEntity = repositroy.save(requestEntity).Id不在requestEntity中,而是在savedEntity中 (9认同)
  • @NPKR 请不要给出这样的答案,试试这个……在需要时添加适当的解释来回答。 (3认同)

Cel*_*lik 8

  1. 你应该使用这个repository.saveAndFlush();方法:

MyObject savedObject= repository.saveAndFlush(newObject);

  1. 在Entity对象描述中,您应该将以下属性(@GeneratedValue(strategy = GenerationType.AUTO))添加到相关字段(id):
@Id   
@Column(name = "id")   
@GeneratedValue(strategy = GenerationType.AUTO)   
public long getId() {  
    return id;  
}
Run Code Online (Sandbox Code Playgroud)


The*_*ect 6

尝试指定@GeneratedValue类似的策略

@GeneratedValue(strategy = GenerationType.AUTO)
Run Code Online (Sandbox Code Playgroud)

  • AUTO是默认值:http://docs.oracle.com/javaee/5/api/javax/persistence/GeneratedValue.html (5认同)

bpe*_*oso 6

此方法返回保存的 id

myobject = repository.saveAndFlush(myobject);
Run Code Online (Sandbox Code Playgroud)

现在你有了你的id.