Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置不是在Java JPA/Hibernate中自动生成的@Id主键?_Java_Postgresql_Hibernate_Spring Boot_Jpa - Fatal编程技术网

如何设置不是在Java JPA/Hibernate中自动生成的@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 =

我将Postgres与Java JPA/Hibernate一起使用,希望id字段由我手动生成。i、 e.无论何时创建此对象的实例,我都会设置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实体)。这个pojoRepository是对crudepository的扩展,因此它可以动态地创建查询


对于所有想知道的人

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


至于这个问题,结果是与SpringJDBC不兼容。解决方案是使用spring boot starter数据jpa,并让存储库扩展JPARepository而不是Crudepository。

检查此答案以了解
@Id
->。它不会为您生成PKs,只会生成列。请尝试
Integer
而不是
int
。还重写
等于
哈希代码
。并确保在模式级别定义了主键。映射看起来不错。
pojoService.saveThis(newpojo)的代码是什么?我可以知道为什么手动生成ID吗?为什么不?在业务用例中使用手动id非常有意义。信用卡类可以将信用卡编号作为主键,用户可以将用户名/id作为主键。用例是有效的。