【发布时间】:2014-09-14 10:29:59
【问题描述】:
关于这个问题,我查看了Spring Data Rest Ambiguous Association Exception,但无法让它为我工作。
正如您在下面的代码中看到的那样,我添加了 @RestResource 注释,其中 rel 等于其他值。
与上面的问题类似,POST 请求有效,但 GET 请求抛出关于具有相同关系类型的多个关联链接的异常:
“无法写入 JSON:检测到多个关联链接相同 关系型!消除歧义 @org.springframework.data.rest.core.annotation.RestResource(rel=createdBy, 导出=真,路径=, description=@org.springframework.data.rest.core.annotation.Description(value=)) @javax.persistence.ManyToOne(可选=true,targetEntity=void, 级联=[],获取=渴望) @javax.persistence.JoinColumn(referencedColumnName=ASSIGNABLE_ID, nullable=false,唯一=false,名称=CREATED_BY,可更新=true, columnDefinition=, foreignKey=@javax.persistence.ForeignKey(name=, value=CONSTRAINT, foreignKeyDefinition=), table=, insertable=true) 私人 com.ag.persistence.domain.PersonEntity com.ag.persistence.domain.TeamEntity.created通过使用@RestResource! (通过参考链: org.springframework.hateoas.PagedResources[\"_embedded\"]->java.util.UnmodifiableMap[\"persons\"]->java.util.ArrayList[0]); 嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException:检测到多个 具有相同关系类型的关联链接!消除歧义 @org.springframework.data.rest.core.annotation.RestResource(rel=createdBy, 导出=真,路径=, description=@org.springframework.data.rest.core.annotation.Description(value=)) @javax.persistence.ManyToOne(可选=true,targetEntity=void, 级联=[],获取=渴望) @javax.persistence.JoinColumn(referencedColumnName=ASSIGNABLE_ID, nullable=false,唯一=false,名称=CREATED_BY,可更新=true, columnDefinition=, foreignKey=@javax.persistence.ForeignKey(name=, value=CONSTRAINT, foreignKeyDefinition=), table=, insertable=true) 私人 com.ag.persistence.domain.PersonEntity com.ag.persistence.domain.TeamEntity.created通过使用@RestResource! (通过参考链: org.springframework.hateoas.PagedResources[\"_embedded\"]->java.util.UnmodifiableMap[\"persons\"]->java.util.ArrayList[0])"
这个错误似乎发生在这个类中:
@Entity
@Table(name = "team")
public class TeamEntity extends AssignableEntity {
private String name;
private LocalDateTime createdDate;
private LocalDateTime modifiedDate;
private Collection<MembershipEntity> memberships;
private PersonEntity createdBy;
private PersonEntity modifiedBy;
@Basic
@Column(name = "NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Basic
@Column(name = "CREATED_DATE")
public LocalDateTime getCreatedDate() {
return createdDate;
}
public void setCreatedDate(LocalDateTime createdDate) {
this.createdDate = createdDate;
}
@Basic
@Column(name = "MODIFIED_DATE")
public LocalDateTime getModifiedDate() {
return modifiedDate;
}
public void setModifiedDate(LocalDateTime modifiedDate) {
this.modifiedDate = modifiedDate;
}
@OneToMany(mappedBy = "team")
public Collection<MembershipEntity> getMemberships() {
return memberships;
}
public void setMemberships(Collection<MembershipEntity> memberships) {
this.memberships = memberships;
}
@RestResource(rel = "team_createdBy")
@ManyToOne
@JoinColumn(name = "CREATED_BY", referencedColumnName = "ASSIGNABLE_ID", nullable = false)
public PersonEntity getCreatedBy() {
return createdBy;
}
public void setCreatedBy(PersonEntity createdBy) {
this.createdBy = createdBy;
}
@RestResource(rel = "team_modifiedBy")
@ManyToOne
@JoinColumn(name = "MODIFIED_BY", referencedColumnName = "ASSIGNABLE_ID", nullable = false)
public PersonEntity getModifiedBy() {
return modifiedBy;
}
public void setModifiedBy(PersonEntity modifiedBy) {
this.modifiedBy = modifiedBy;
}
}
具有讽刺意味的是,我没有访问这个特定的资源。我还有 createdBy 和 modifiedBy 的其他资源——它是导致此问题的原因吗?
【问题讨论】:
-
是否有其他实体拥有
createdBy属性?例如PersonEntity? -
我所有的实体都有四个字段:
createdBy、modifiedBy、createdDate和modifiedDate -
这可能是问题所在。看看this question。您的
TeamEntity中的PersonEntitys 都可能公开一个链接createdBy。 -
我需要这些字段进行编辑——有解决方法吗?
-
PersonEntity 和 TeamEntity 有自己的存储库吗?也请粘贴这些类。
标签: java spring spring-mvc spring-data spring-data-rest