jpa hibernate@onetomany无法插入子级

bkkx9g8r  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(426)

我有一个叫做“回顾”的实体 @OneToMany 与某人的关系 ReviewStage 实体。在我看来很简单。
我的数据库如下所示: Review 表格:
审阅\u id
名称 Stage 表格:
阶段id
审阅\u id
名称 Review 实体:

@Entity
@Getter @Setter @NoArgsConstructor
public class Review {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long reviewId;
    private String name;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "reviewId", fetch=FetchType.EAGER)
    private Set<ReviewStage> stages;
}
``` `ReviewStage` 实体:

@Entity
@Getter @Setter @NoArgsConstructor
public class ReviewStage {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long stageId;
private Long reviewId;
private String name;
}

我将以下json发布到我的服务中:

{
"reviewId": 0,
"name": "TEST",
"stages": [{
"stageId": 0,
"reviewId": 0,
"name": "Stage 1"
}]
}

jdbc错误:com.microsoft.sqlserver.jdbc.sqlserverexception:insert语句与外键约束“fk\u er\u review\u stage\u er\u review”冲突。冲突发生在数据库“ereviewdev”、表“dbo.review”、列“review\u id”中。
我错过了什么?我试着把 `@Transactional` 在我的服务课上,但没有任何影响。看起来很简单。
z4iuyo4d

z4iuyo4d1#

以下Map:

@Entity
public class Review {

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "reviewId", fetch=FetchType.EAGER)
    private Set<ReviewStage> stages;

    public Review() {
       stages = new HashSet<>();
    }

    public void addStage(ReviewStage stage) {
        stages.add(stage);
        stage.setReview(this);
    }

    public void removeStage(ReviewStage stage) {
        stages.remove(stage);
        stage.setReview(null);
    }
}

假设您有以下子级。

@Entity
public class ReviewStage {

    @ManyToOne
    @JoinColumn(name = "review_id")
    private Review reviewId;
}

但你有:

@Entity
public class ReviewStage {

    private Long reviewId;
}

编辑一个示例,说明如何保存新的 Review :

Review review = new Review();
review.setName("New review");

ReviewStage stage1 = new ReviewStage();
ReviewStage stage2 = new ReviewStage();
review.addStage(stage1);
review.addStage(stage2);
reviewRepository.save(review);

相关问题