SQL 服务器标识开启但 org.hibernate.id.IdentifierGenerationException:此 class 的 ID 必须在查询调用 save() 之前手动分配

SQL server identity ON but org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned beforeQuery calling save()

我正在 Java 中构建一个休息 Web 服务,其中 json 输入 hibernate 用于数据库连接,对于数据库,我使用 MS SQL 服务器作为我的数据库。尽管我的 DB table ID 列设置为自动递增,但我遇到了此错误 ID 必须在查询调用 save()

之前手动分配此 class

以下是我的 JSON 请求示例:

{
    "message": "Hi",
    "createdOn": "2020-04-29T19:39:14.589+05:30",
    "amount": "58.1"
}

我的模型class是这样的,我都试过了。我的 SQL 服务器 table 中启用了自动递增,可能是什么问题?:

 import java.util.Date;

    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.xml.bind.annotation.XmlRootElement;


    @Entity
    @Table(name = "MessagesDetail")
    @XmlRootElement
    public class Message
    {
    @Id
    @Column(name = "msg_id",unique=true, nullable = false)
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long msg_id;
    @Column
    private String message;
    @Column
    private Date createdOn;
    @Column
    private Double amount;

    public Long getMsg_id()
    {
        return msg_id;
    }



    public void setId(Long msg_id)
    {
        this.msg_id= msg_id;
    }



    public String getMessage()
    {
        return message;
    }



    public void setMessage(String message)
    {
        this.message = message;
    }



    public Date getCreatedOn()
    {
        return createdOn;
    }



    public void setCreatedOn(Date createdOn)
    {
        this.createdOn = createdOn;
    }



    public Double getAmount()
    {
        return amount;
    }



    public void setAmount(Double amount)
    {
        this.amount = amount;
    }



    public Message()
    {
    }



    public Message(Long id, String message, Date createdOn, Double amount)
    {
        this.id = id;
        this.message = message;
        this.createdOn = createdOn;
        this.amount = amount;
    }


    }

然后我使用以下代码保存它:

public void addMessage(Message bean){
    Session session = SessionUtil.getSession();
    Transaction tx = session.beginTransaction();
    addMessage(session,bean);
    tx.commit();
    session.close();

}

private void addMessage(Session session, Message bean){
    Message message = new Message();

    message.setMessage(bean.getMessage());
    message.setCreatedOn(bean.getCreatedOn());
    message.setAmount(bean.getAmount());
    session.save(Message);
}

我将我的 id 参数 class 的映射更改为 identity 而不是 assigned,现在它工作得很好。请参考以下更改:

之前:

<class name="com.sample.rest.model.Message" table="MessagesDetail">  
<id name="msg_id" type="java.lang.Integer">
<column name="msg_id"></column>
 <generator class="assigned"></generator>  
</id>  

之后:

<class name="com.sample.rest.model.Message" table="MessagesDetail">  
<id name="msg_id" type="java.lang.Integer">
<column name="msg_id"></column>
 <generator class="identity"></generator>  
</id>