How to set an @Id primary key that is NOT Auto-Generated in Java JPA/Hibernate?

Adam :

I am using Postgres with Java JPA/Hibernate and want to have the id field as one that is MANUALLY GENERATED by me. i.e. whenever i create an instance of this object, i set the id field anyway.

I've tried for weeks but keep running into either: "Required identifier property not found for class" or "After saving, the identifier must not be null".

Here is a sample of the model class i am using:

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;
    }
}

Here is a sample request i'm calling in

    @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

Adam :

For all those wondering,

YES - It is possible to have a manual id, and this makes sense in multiple use cases where entities have inherent id attributes. (such as credit cards, bank accounts, etc)

As for this problem, it turned out to be an incompatibility with Spring JDBC. The solution is to use spring-boot-starter-data-jpa instead, and have repositories extend JPARepository instead of CrudRepository.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=155816&siteId=1