简体   繁体   中英

Embeddable PK Object not populating after persist and flush

I have an embedded PK object that doesn't populate the id field after persisting and flushing to the database. The ID is an auto-increment field in the database.

Now normally, I would just try a refresh, but it throws the following error:

"Entity no longer exists in the database: entity.Customers[ customersPK=entity.CustomersPK[ id=0, classesId=36 ] ]."

public class Customers implements Serializable {

    @EmbeddedId
    protected CustomersPK customersPK;
    ...
}

@Embeddable
public class CustomersPK implements Serializable {
    @Basic(optional = false)
    @Column(name = "id")
    private int id;

    @Basic(optional = false)
    @NotNull
    @Column(name = "classes_id")
    private int classesId;
    .....
 }

And here's the code that makes the call

Classes cl = em.find(Classes.class, classId);

CustomersPK custPK = new CustomersPK();
custPK.setClassesId(cl.getId());
Customers cust = new Customers(custPK);

em.persist(cust);
em.flush(); 


// The problem is right here where id always equals 0
int id = cust.getCustomerspk().getId();

Thanks for the help.

Why would the id not be 0, you have never set it?

If it is a generated id, you need to annotate it using @GeneratedValue, otherwise you need to set the value.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM