【发布时间】:2019-11-06 19:39:41
【问题描述】:
我正在使用带有 Java JPA/Hibernate 的 Postgres,并希望将 id 字段作为我手动生成的字段。即,每当我创建此对象的实例时,我都会设置 id 字段。
我已经尝试了几个星期,但一直遇到以下问题:“找不到类所需的标识符属性”或“保存后,标识符不能为空”。
这是我正在使用的模型类的示例:
import javax.persistence.*;
@Entity
@Table(name = "pojo")
public class Pojo {
@Id
@Column(name = "id_one")
private int idOne;
@Column(name = "bool_example")
private boolean boolExample;
public Pojo(){};
public Pojo(int idOne, boolean boolExample){
this.idOne = idOne;
this.boolExample = boolExample;
}
public int getIdOne() {
return idOne;
}
public void setIdOne(int idOne) {
this.idOne = idOne;
}
public boolean isBoolExample() {
return boolExample;
}
public void setBoolExample(boolean boolExample) {
this.boolExample = boolExample;
}
}
这是我正在调用的示例请求
@GetMapping(value = "/plswork")
public String pojotestone(){
Pojo newpojo = new Pojo(1, false);
pojoService.saveThis(newpojo);
pojoService.test();
return "yes";
}
pojoService 调用 pojoRepository.save(T entity)。这个 pojoRepository 来自扩展 CrudRepository,因此它可以动态创建查询
【问题讨论】:
-
查看此答案以了解有关
@Id-> stackoverflow.com/questions/36275309/… 的一些信息。它不会为您生成 PK,而只会为您生成列。 -
尝试
Integer而不是int。同时覆盖equals和hashcode。并确保您已在架构级别定义主键。 -
映射看起来不错。
pojoService.saveThis(newpojo);的代码是什么? -
请问为什么要手动生成ID?
-
为什么不呢?在业务用例中使用手动 id 很有意义。信用卡类可以将信用卡号作为主键,用户可以将用户名/ID 作为主键。用例有效。
标签: java postgresql hibernate spring-boot jpa