org.hibernate.id.IdentifierGenerationException:尝试在保存主子记录的同时从空的一对一属性分配ID

时间:2019-07-24 00:36:55

标签: java hibernate spring-boot one-to-one

我有一个具有一对一关系的主表和子表。子表ID字段是主表的引用字段,也是主键。主表的ID字段不会自动生成,而是会手动设置。在保存对象及其子引用的同时,它在错误“ org.hibernate.id.IdentifierGenerationException以下抛出错误”:尝试从空的一对一属性分配ID

我提供了代码以供参考。

注意:-如果我将主表中的ID密钥设为自动生成,则可以正常工作。但是我想传递从JSON请求中收到的ID。

package com.entities;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import java.sql.Timestamp;

@Entity
@Table(name="MASTER")
public class Master {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="ORDER_ID", unique = true, nullable = false)
    private long orderId;

    @Column(name="MasterNumber", length = 17)
    private String masterNumber;

    @OneToOne(mappedBy = "master", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name="ORDER_ID", nullable=false, insertable=false, updatable=false)
    private Child child;

    @Column(name="Received_Date")
    private Timestamp receivedDate;

    public long getOrderId() {
        return orderId;
    }

    public void setOrderId(long orderId) {
        this.orderId = orderId;
    }

    public String getMasterNumber() {
        return masterNumber;
    }

    public void setMasterNumber(String masterNumber) {
        this.masterNumber = masterNumber;
    }

    public Child getChild() {
        return child;
    }

    public void setChild(Child child) {
        this.child = child;
        this.child.setMaster(this);
    }

    public Timestamp getReceivedDate() {
        return receivedDate;
    }

    public void setReceivedDate(Timestamp receivedDate) {
        this.receivedDate = receivedDate;
    }
}

package com.entities;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.ForeignKey;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.MapsId;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name="CHILD")
public class Child {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="ORDER_ID")
    private long orderId;

    @MapsId
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="ORDER_ID", referencedColumnName = "ORDER_ID", foreignKey = @ForeignKey(name="FK_Master_Child_REF"), nullable = false)
    private Master master;

    public long getOrderId() {
        return orderId;
    }

    public void setOrderId(long orderId) {
        this.orderId = orderId;
    }

    public Master getMaster() {
        return master;
    }

    public void setMaster(Master master) {
        this.master = master;
        this.setOrderId(master.getOrderId());
    }
}

存储库类

package com.dao;


import com.entities.Master;
import org.springframework.data.repository.CrudRepository;

public interface MasterRepository extends CrudRepository<Master, Long> {
}

要保存的辅助方法

public void Save(Master master)
{
    masterRepository.save(master);


}



java.util.Date today = new java.util.Date();
java.sql.Timestamp currentTime = new java.sql.Timestamp(today.getTime());
Master master = new Master();
master.setOrderId(1212L);
master.setMasterNumber("M001");
master.setReceivedDate(currentTime);

Child child = new Child();
child.setMaster(master);
master.setChild(child);
Helper.Save(master);

我希望插入主记录和子记录。但是我收到以下错误。

  

“ org.hibernate.id.IdentifierGenerationException:尝试分配   空一对一属性的ID

请帮助我。提前致谢。

0 个答案:

没有答案