我有一个具有一对一关系的主表和子表。子表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
请帮助我。提前致谢。