我的父母有:
@Entity
@Table(name="engineering.drawingrevisions")
public class DrawingRevision implements DrawingRevisionInterface, Serializable {
private int drawingRevisionID;
private DrawingRevisionManufacturing manufacturing;
@Id
@Column(name="pk_drawingrevisionid")
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Override
public int getDrawingRevisionID() {
return drawingRevisionID;
}
public void setDrawingRevisionID(int drawingRevisionID) {
this.drawingRevisionID = drawingRevisionID;
}
@OneToOne(mappedBy="drawingRevision", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JsonView({View.DrawingRevisionView.class,View.DrawingView.class,View.RFQueueView.class})
public DrawingRevisionManufacturing getManufacturing() {
return manufacturing;
}
public void setManufacturing(DrawingRevisionManufacturing manufacturing) {
if (manufacturing==null) {
if (this.manufacturing!=null) {
this.manufacturing.setDrawingRevision(null);
}
} else {
manufacturing.setDrawingRevision(this);
}
this.manufacturing = manufacturing;
}
}
相应的孩子:
@Entity
@Table(name="engineering.drawingrevision_manufacturing")
public class DrawingRevisionManufacturing implements Serializable {
private static final long serialVersionUID = 1L;
private int drawingRevisionID;
private DrawingRevision drawingRevision;
public DrawingRevisionManufacturing() {
}
@Id
@Column(name="fk_drawingrevisionid")
public int getDrawingRevisionID() {
return drawingRevisionID;
}
public void setDrawingRevisionID(int drawingRevisionID) {
this.drawingRevisionID = drawingRevisionID;
}
@OneToOne
@MapsId("drawingRevisionID")
@JoinColumn(name="fk_drawingrevisionid")
public DrawingRevision getDrawingRevision() {
return drawingRevision;
}
public void setDrawingRevision(DrawingRevision drawingRevision) {
this.drawingRevision = drawingRevision;
}
}
当我有一个drawingRevisionID=0的新drawingRevisionID时,问题就出现了。我希望DrawingRevisionManufacturing将根据CascadeType.ALL正确更新其ID。
在我的服务层中,我确保存在关联:
if (rev.getManufacturing().getDrawingRevisionID()==0) {
rev.getManufacturing().setDrawingRevision(rev);
}
使用此代码,则会出现外键约束冲突,因为它试图在drawingRevisionID为0的drawingRevisionID制造中插入条目(这不好)。
如果我改变
setDrawingRevision()
成为
public void setDrawingRevision(DrawingRevision drawingRevision) {
this.drawingRevision = drawingRevision;
this.drawingRevisionID = drawingRevision.getDrawingRevisionID();
}
然后我得到一个hibernate错误,一个实例的标识符从0更改为10322(或任何数字)。
我缺少了什么可以让我成功保存新的绘图修订版?