我有一位父母:
@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的新DrawingRevision时,问题就出现了。我所期望的是DrawingRevisionManufacturing将基于CascadeType.ALL正确地更新其ID。
在我的服务层中,我确保有一个关联:
if (rev.getManufacturing().getDrawingRevisionID()==0) {
rev.getManufacturing().setDrawingRevision(rev);
}使用这段代码,我得到了一个违反外键约束的情况,因为它试图在drawingrevision_manufacturing中插入一个drawingRevisionID为0的条目(这是不好的)。
如果我将setDrawingRevision()更改为
public void setDrawingRevision(DrawingRevision drawingRevision) {
this.drawingRevision = drawingRevision;
this.drawingRevisionID = drawingRevision.getDrawingRevisionID();
}然后,我得到一个hibernate错误,实例的标识符从0更改为10322 (或其他任何数字)。
我遗漏了什么使我能够成功保存新DrawingRevision?
发布于 2019-01-18 18:43:42
在DrawingRevisionManufacturing实体中添加以下代码,
@OneToOne
@MapsId("drawingRevisionID")
@JoinColumn(name="fk_drawingrevisionid" ,referencedColumnName ="pk_drawingrevisionid")
public DrawingRevision getDrawingRevision() {
return drawingRevision;
}如果有任何问题通知
https://stackoverflow.com/questions/54246165
复制相似问题