SQL идентификация сервера включена, но org.hibernate.id.IdentifierGenerationException: идентификаторы для этого класса должны быть назначены вручную перед тем, как Query вызывает save () - PullRequest
0 голосов
/ 30 апреля 2020

Я создаю отдыхающий веб-сервис в Java с json входным режимом гибернации для подключения к БД и для БД. В качестве базы данных я использую MS SQL Server. Хотя для моего столбца идентификаторов таблицы БД установлено автоматическое приращение, я испытываю эту ошибку, для которой необходимо назначить идентификаторы ошибок для этого класса перед вызовом запроса save ()

Ниже приведен мой JSON пример запроса:

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

Мой класс модели такой, я все перепробовал. В моей таблице SQL Server включено автоматическое увеличение, в чем может быть проблема?:

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

1 Ответ

0 голосов
/ 30 апреля 2020

Я изменил отображение моего класса параметров идентификатора на identity вместо назначенного , и теперь оно работает отлично. См. Следующее изменение:

До:

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