jpa EmbeddedId mappedBy Sping Boot 3.1.4不工作

uemypmqf  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(89)

自从更新到Sping Boot 3.1.4后,我在mappedBy和EmbeddedId上遇到了一个问题。它适用于所有以前的Sprint Boot 版本。下面是一个例子:
具有mappedBy到EmbeddedId的实体:

@Entity
@Getter
@Setter(AccessLevel.PROTECTED)
@Table(name = "STATUS")
public class Status {

    @Id
    private String id;

    @OneToMany(mappedBy = "id.globalId")
    private List<StatusLabel> labels;

}

具有EmbeddedId的实体:

@Entity
@Getter
@Setter(AccessLevel.PROTECTED)
@Table(name = "STATUS_LABELS")
public class StatusLabel {

    @EmbeddedId
    private LabelGlobalId id;

    private String labelname;
    private String shortname;

}

EmbeddedId:

@Embeddable
@Getter
@Setter(AccessLevel.PROTECTED)
public class LabelGlobalId implements Serializable {

    private String globalId;
    private String langId;
}
hivapdat

hivapdat1#

要Map一个id或嵌入的id,应该使用@MapsId。我怀疑关系中的mappedBy是偶然发生的,而不是故意的。
另请参阅文档中的相关部分。

@Entity
@Getter
@Setter(AccessLevel.PROTECTED)
@Table(name = "STATUS")
public class Status {

    @Id
    private String id;

    @OneToMany
    @MapsId("globalId")
    private List<StatusLabel> labels;

}

像这样的东西应该可以。

goqiplq2

goqiplq22#

如果要解决此问题,需要修改Status实体中的mappedBy属性:

@OneToMany(mappedBy = "id")
private List<StatusLabel> labels;

相关问题