java - 如何设置不是在 Java JPA/Hibernate 中自动生成的@Id 主键?

标签 java postgresql hibernate spring-boot jpa

我将 Postgres 与 Java JPA/Hibernate 一起使用,并希望将 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";
    }

The pojoService calls on pojoRepository.save(T entity). This pojoRepository is from extending CrudRepository so it creates queries on the fly

最佳答案

对于所有想知道的人,

是 - 可以有一个手动 ID,这在实体具有固有 ID 属性的多个用例中是有意义的。 (例如信用卡、银行账户等)

至于这个问题,原来是Spring JDBC的不兼容。解决方案是改用 spring-boot-starter-data-jpa,并且 让存储库扩展 JPARepository 而不是 CrudRepository。

关于java - 如何设置不是在 Java JPA/Hibernate 中自动生成的@Id 主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56746034/

相关文章:

java - JAXB XmlIDREF 和映射/列表

同步后Java并发修改异常

java - 如何在 java 中编写一个接受两个相同类型参数的泛型方法?

java - Hibernate、存储过程和无效参数索引错误

java - 无法加载请求的类 org.hsqldb.jdbcDriver

java - 根据用户输入在数组中对数字进行排序 Java

postgresql - Prometheus PostgreSQL 服务器导出器示例无法在 MacOS 上运行?

sql - 计数除法在完整代码中不起作用

sql - 如何在 PostgreSql 中插入一条记录并返回新的 id 作为输出参数

java - 自定义 SQL 查询,将 SELECT 结果插入到 Spring Boot JPA Hibernate 中的表中