如何设置不是在Java JPA/Hibernate中自动生成的@Id主键?
我将Postgres与Java JPA/Hibernate一起使用,希望id字段由我手动生成。i、 e.无论何时创建此对象的实例,我都会设置id字段 我已经尝试了几个星期,但始终遇到以下两种情况:“找不到类的必需标识符属性”或“保存后,标识符不得为空” 下面是我正在使用的模型类的示例:如何设置不是在Java JPA/Hibernate中自动生成的@Id主键?,java,postgresql,hibernate,spring-boot,jpa,Java,Postgresql,Hibernate,Spring Boot,Jpa,我将Postgres与Java JPA/Hibernate一起使用,希望id字段由我手动生成。i、 e.无论何时创建此对象的实例,我都会设置id字段 我已经尝试了几个星期,但始终遇到以下两种情况:“找不到类的必需标识符属性”或“保存后,标识符不得为空” 下面是我正在使用的模型类的示例: import javax.persistence.*; @Entity @Table(name = "pojo") public class Pojo { @Id @Column(name =
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实体)。这个pojoRepository是对crudepository的扩展,因此它可以动态地创建查询
对于所有想知道的人 是-可以有一个手动id,这在实体具有固有id属性的多个用例中是有意义的。(如信用卡、银行账户等)
至于这个问题,结果是与SpringJDBC不兼容。解决方案是使用spring boot starter数据jpa,并让存储库扩展JPARepository而不是Crudepository。检查此答案以了解
@Id
->。它不会为您生成PKs,只会生成列。请尝试Integer
而不是int
。还重写等于
和哈希代码
。并确保在模式级别定义了主键。映射看起来不错。pojoService.saveThis(newpojo)的代码是什么代码>?我可以知道为什么手动生成ID吗?为什么不?在业务用例中使用手动id非常有意义。信用卡类可以将信用卡编号作为主键,用户可以将用户名/id作为主键。用例是有效的。