当前位置: 首页 > 知识库问答 >
问题:

Spring数据Rest模糊关联异常

陈法
2023-03-14

由于我的域类中存在不明确的关联,新添加的LinkCollectingAssociationHandler正在引发MappingException

链接数组如下所示:

[

它试图在抛出异常时添加另一个“房间”关系。

问题是,它似乎添加了关系的链接,我已显式标记为@RestResources(导出=false)

以下是一个我认为导致此问题的关系示例:

@JsonIgnore
@RestResource(exported = false)
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.room", cascade = {CascadeType.REMOVE})
private Set<RoomsByUserAccessView> usersThatCanDisplay = new HashSet<>(); 

类型RoomsByUserAccessView具有由RoomUser组成的嵌入式id。

我还用以下注释了embedded id属性:

@JsonIgnore
@RestResource(exported = false)
private RoomsByUserAccessViewId pk = new RoomsByUserAccessViewId();

其性质如下:

@JsonIgnore
@RestResource(exported = false)
private Room room;

@JsonIgnore
@RestResource(exported = false)
private User userWithAccess;

public RoomsByUserAccessViewId() {
    //
}

如何让它在序列化到JSON时正确忽略这些关系?

我的代码在DATAREST-262(https://github.com/spring-projects/spring-data-rest/commit/1d53e84cae3d09b09c4b5a9a4caf438701527550)之前工作

尝试访问文件室/endpoint时返回的完整错误消息如下:

{时间戳:"2014-03-17T13:38:05.481-0500"错误:"内部服务器错误"状态: 500异常:"org.springframework.http.converter.HttpMessageNotWritableExc0019"消息:"无法写入JSON:检测到具有相同关系类型的多个关联链接!消除歧义关联@com.fasterxml.jackson.annotation.JsonIgnore(value=true)@javax.persistence.ManyToOne(读取=EAGER,级联=[],可选=true,目标实体=无效)@org.springframework.data.rest.core.annotation.RestResource(description=@org.springframework.data.rest.core.annotation.描述(value=),路径=,导出=false,rel=)私有com.renovo.schedulerapi.domain.房间com.renovo.schedulerapi.domain.RoomsByUserAccessViewId.room使用@RestResources!(通过引用链:org.springframework.hateoas.PagedResources[内容]-


共有2个答案

牧宁
2023-03-14

我有这个问题,并按照罗恩的建议解决了它,但我想我应该解释一下。我头几次读罗恩的回答时并没有完全理解...

@NodeEntity
public class Player extends Entity

@NodeEntity
public class PlayerTrade extends Entity

@NodeEntity
public class Trade extends Entity

我有玩家和交易的存储库,但没有PlayerTrade的存储库:

@RepositoryRestResource
public interface PlayerRepository  extends GraphRepository<Player> {

@RepositoryRestResource
public interface TradeRepository extends GraphRepository<Trade> {

我一加上最后一次回购,它就起了作用。

@RepositoryRestResource
public interface PlayerTradeRepository extends GraphRepository<PlayerTrade> 

我尝试在rel或excluded中使用@RestResource,但无法拨入。这是否意味着JSON图中的每个实体都必须有一个存储库?

翟奇
2023-03-14

我有一个非常类似的问题。在两个实体之间添加双向关系时

我遇到异常“”,无法写入JSON:检测到多个具有相同属性的关联链接

关系类型!",同时尝试我在这里找到的一些解决方案

@JsonIgnore、@JsonIdentity、@RestResource,我也试着做奥利弗提供的事情)

(该关系已通过@JsonManaged参考@JsonBack参考正确定义

没有任何帮助。

最后,我设法理解了SpringDataREST正在尝试

确定相关实体是否可链接(在尝试构建

被请求实体)

LinkCollectingAssociationHandler: doAnd Association-

为此,他正在寻找一个处理

相关实体。为相关实体添加存储库后。。很有魅力。。

(我假设在添加一个repo之后,映射repositoryawareersourceinformation正在生成

为这个实体创建的(这是我在调试时看到的)。

 类似资料:
  • 我想知道如何通过REST调用删除多对多关联。我能够创建记录并将其关联,但不知道如何删除。 我有一个SpringBoot项目,在这个项目中,我使用REST和HATEOAS绕过服务和控制器,并直接公开我的存储库。 我有一个用户模型/域类 如您所见,我有一个roles成员,它与Role类有多对多的关联,其代码如下: 我的仓库看起来是这样的: 用户库 角色还原 现在一切都好了。当我从浏览器访问项目根目录时

  • 将HttpServletRequest或HttpServletResponse注入@RestController类中的@RequestMapping方法会导致异常(至少在@SpringBootTest注释启用测试中): 错误: 这是Spring的错误吗?我做错了吗?我几乎可以肯定地通过消除过程跟踪它到HttpServletRequest注入,而不是@Request estParamJSON(一种自

  • 我在我的web应用程序中使用了Spring Boot1.5.7、Spring Data REST、Spring JPA、Hibernate、Spring HATEOAS、Spring Validation和Swagge。这个应用程序提供RESTendpoint,这些endpoint将由Angular客户机使用。 在我的模型中,许多实体都有一个列表。用户、车票、退票等有一个。根据我在网上找到的一些文

  • 当创建新的实体关联时,是否有任何spring data rest事件处理程序可用?即。置入关联资源URL。 关联资源:http://docs.spring.io/spring-data/rest/docs/2.3.0.release/reference/html/#repository-resources.Association-resource

  • 问题内容: 我有两组数据。现有客户和潜在客户。 我的主要目标是弄清楚是否有任何潜在客户已经是现有客户。但是,跨数据集的客户命名约定不一致。 现有客户 潜在客户 我想写一些如下所示的选择语句来达到我的目标: 结果如下所示: 我对Levenshtein距离和Double Metaphone的概念含糊其词,但我不确定如何在此处应用它。 理想情况下,我希望SELECT语句的JOIN部分读取类似以下内容:但

  • 在使用@RepositoryRestResource将域对象导出到Rest时,如何在Java中创建Neo4j关系?