也许是 spring data-jpa 的另一个多对多关系问题以及如何使用另一个现有实体更新现有实体。我将放置一个简短版本的实体,以便仅在错误发生时进行澄清。
我有一个 Peticion 实体:
@Entity
@Table(name = "peticiones")
@JsonIdentityInfo(generator =
ObjectIdGenerators.PropertyGenerator.class,property = "id", scope =
Peticion.class)
@Validated
public class Peticion
{
private int id;
private Usuario usuario;
private Categoria categoria;
private Set<Tag> tags;
@ManyToMany( fetch = FetchType.LAZY, cascade = {
CascadeType.MERGE
} )
@JoinTable( name="peticion_tag", joinColumns= @JoinColumn(name = "peticion_id", referencedColumnName="id"), inverseJoinColumns = @JoinColumn(name="tag_id", referencedColumnName="id") )
public Set<Tag> getTags() {
return tags;
}
public void setTags(Set<Tag> tags) {
this.tags = tags;
}
和标签实体:
@Entity
@Table(name = "tags")
@JsonIdentityInfo(generator =
ObjectIdGenerators.PropertyGenerator.class,property = "id", scope =
Tag.class)
public class Tag
{
private int id;
@Size( min = 4 )
private String nombre;
private Set<Peticion> peticiones;
private Set<Categoria> categorias;
private Set<Usuario> usuarios;
@ManyToMany( mappedBy="tags" )
public Set<Peticion> getPeticiones() {
return peticiones;
}
public void setPeticiones(Set<Peticion> peticiones) {
this.peticiones = peticiones;
}
好的,所以当我尝试以以下格式放置或修补一个 Peticion 时: { “id”:123, “usuario”:{ “编号”:5 }, “类别”:{ “ID”:7 }, “标签”:[ { “id”:3 }, { “id”:10 } ] }
当我发送此信息时,我收到一条错误,指出我违反了约束条件,说 name 我认为 Tag 的一个属性为 null...所以我发现这是试图创建另一个实体,但这不是我想要做的情况,我想更新 Peticion 和 Tag 之间的关系,例如,如果我这样做:
{
"id": 123,
"usuario":{
"id": 5
},
"categoria":{
"id": 7
},
"tags":[]
}
它工作得很好,我的意思是它删除了之前的关系标签。所以我不知道我是否正确发送了 json,或者我是否必须在我的实体中添加另一个配置注释或其他内容。注意:我使用 JpaRepository 进行保存/更新,我的 Controller 仅调用方法 save。
谢谢
您可能缺少对数据库层上关系实体的获取,我认为您还应该共享用于获取链接数据的存储库和查询。
我是一名优秀的程序员,十分优秀!