Hibernate: How to fix "identifier of an instance altered from X to Y"?

org.hibernate.HibernateException: identifier of an instance 
of org.cometd.hibernate.User altered from 12 to 3

in fact, my user table is really must dynamically change its value, my Java app is multithreaded. Any ideas how to fix it?


Solution 1:

Are you changing the primary key value of a User object somewhere? You shouldn't do that. Check that your mapping for the primary key is correct.

What does your mapping XML file or mapping annotations look like?

Solution 2:

You must detach your entity from session before modifying its ID fields

Solution 3:

In my case, the PK Field in hbm.xml was of type "integer" but in bean code it was long.

Solution 4:

In my case getters and setter names were different from Variable name.

private Long stockId;
    public Long getStockID() {
        return stockId;
    }
    public void setStockID(Long stockID) {
        this.stockId = stockID;
    }

where it should be

public Long getStockId() {
    return stockId;
}
public void setStockId(Long stockID) {
    this.stockId = stockID;
}