簡體   English   中英

SQL 服務器身份打開,但 org.hibernate.id.IdentifierGenerationException:此 class 的 ID 必須在查詢調用保存之前手動分配()

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

I'm building a rest web service in Java with json input hibernate for DB connection and for DB I'm using MS SQL Server as my database. 盡管我的 DB 表 ID 列設置為自動增量,但我遇到了此 class 的錯誤 ID,必須在查詢調用 save() 之前手動分配

以下是我的 JSON 請求示例:

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

我的model class是這樣的,我都試過了。 自動增量在我的 SQL 服務器表中打開,可能是什么問題?:

 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 的映射更改為標識而不是分配,現在它可以正常工作了。 請參閱以下更改:

前:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM