首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Data JPA一对一和mapsId错误

Spring Data JPA一对一和mapsId错误
EN

Stack Overflow用户
提问于 2019-01-18 08:23:25
回答 1查看 217关注 0票数 1

我有一位父母:

代码语言:javascript
复制
@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;
    }
}

以及相应的子对象:

代码语言:javascript
复制
@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。

在我的服务层中,我确保有一个关联:

代码语言:javascript
复制
if (rev.getManufacturing().getDrawingRevisionID()==0) {
    rev.getManufacturing().setDrawingRevision(rev);
}

使用这段代码,我得到了一个违反外键约束的情况,因为它试图在drawingrevision_manufacturing中插入一个drawingRevisionID为0的条目(这是不好的)。

如果我将setDrawingRevision()更改为

代码语言:javascript
复制
public void setDrawingRevision(DrawingRevision drawingRevision) {
    this.drawingRevision = drawingRevision;
    this.drawingRevisionID = drawingRevision.getDrawingRevisionID();
}

然后,我得到一个hibernate错误,实例的标识符从0更改为10322 (或其他任何数字)。

我遗漏了什么使我能够成功保存新DrawingRevision?

EN

回答 1

Stack Overflow用户

发布于 2019-01-18 18:43:42

在DrawingRevisionManufacturing实体中添加以下代码,

代码语言:javascript
复制
@OneToOne
@MapsId("drawingRevisionID")
@JoinColumn(name="fk_drawingrevisionid" ,referencedColumnName ="pk_drawingrevisionid")
public DrawingRevision getDrawingRevision() {
    return drawingRevision;
}

如果有任何问题通知

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54246165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档