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

使用spring data rest在2个实体之间一对一地创建关系/链接

楚弘益
2023-03-14

“必须只发送1个链接才能更新不是列表或地图的属性引用”

细节:

// Data model
// Master library class which have one address
@Entity
public class Library {

    @Id
    @GeneratedValue
    private long id;

    @Column
    private String name;

    @OneToOne
    @JoinColumn(name = "address_id")
    @RestResource(path = "libraryAddress", rel="address")
    private Address address;

    // standard constructor, getters, setters
}

// Address linked with a onetoone relation with library
@Entity
public class Address {

    @Id
    @GeneratedValue
    private long id;

    @Column(nullable = false)
    private String location;

    @OneToOne(mappedBy = "address")
    private Library library;

    // standard constructor, getters, setters
}

// Repositories
public interface LibraryRepository extends CrudRepository<Library, Long> {}
public interface AddressRepository extends CrudRepository<Address, Long> {}

使用rest api进行的查询:

curl -i -X POST -H "Content-Type:application/json"
  -d '{"name":"My Library"}' http://localhost:8080/libraries
curl -i -X POST -H "Content-Type:application/json"
  -d '{"location":"Main Street nr 5"}' http://localhost:8080/addresses
curl -i -X PUT -d "http://localhost:8080/addresses/1"
  -H "Content-Type:text/uri-list" http://localhost:8080/libraries/1/libraryAddress

问候,布莱德。

共有1个答案

席成仁
2023-03-14

它实际上是Spring Boot 2.2.0org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController类第321行中的一个bug:

if (source.getLinks().hasSingleLink()) {
        throw new IllegalArgumentException(
            "Must send only 1 link to update a property reference that isn't a List or a Map.");
}

应该是:

if (!source.getLinks().hasSingleLink()) {
        throw new IllegalArgumentException(
            "Must send only 1 link to update a property reference that isn't a List or a Map.");
}

下面是String Boot 2.1.7的代码

if (source.getLinks().size() != 1) {
        throw new IllegalArgumentException(
            "Must send only 1 link to update a property reference that isn't a List or a Map.");
}
 类似资料:
  • 我在这里粘贴类: 链类: 相机项目类别:

  • 我已经试着解决这件事很长一段时间了,但我什么也没得到。我一直在试图保存一个实体,该实体拥有对另一个实体的引用。 用户通过填写表单创建一个place实体,然后按save保存该实体。它应该自动在“places”和“place\u url”表中创建新行。下面是我正在加载到应用程序中的SQL文件的链接:https://pastebin.com/x8Gvk7ub 母实体: 子实体: 控制器: Hiberna

  • 我很难找到数据库中多对多关系的最佳设计。我的项目允许用户创建我们所说的日志警报。日志警报将检查给定的日志是否满足某些标准,如果满足,它将向AWS SNS主题发送消息。我想做的是将日志警报与AWS SNS主题联系起来。我还想将哪个用户分配日志警报与AWS SNS主题联系起来。

  • 问题内容: 我想要3个Java类的对象之间的 单向 一对一关系:“人到心脏”和“人到肝脏”。我希望对象共享相同的PK,即每个人都有相应的心脏和肝脏,其中person.person_id = heart.heart_id = liver.liver_id。我不想将3个表合并为1个表,因为每个表都有很多字段。这是我的代码(主要基于该问题的公认答案): 我设置了会话并执行以下操作: 然后,如果我将人对象

  • 用户表结构:用户 id、名称、用户名、密码、创建时间、更新时间 文章表结构:文章 id、标题、内容、创建时间、更新时间 关系表:文章\用户 id、文章id、用户id处于活动状态、创建时间、更新时间 标签 id、名称、用户id、创建时间、更新时间 透视表项目用户与标记的关系。表:文章\用户\标签 标签号,物品号,用户号 我想连接这些表,以便可以像这样或类似的格式访问 并且应该能够创建/更新smth,

  • 我很难模拟这种情况。我在设计一个基于位置的优惠券系统。用户可以定义区域和优惠,然后将每个优惠关联到多个区域。此外,每个区域可以有多个优惠。所以zone和offer有很多对很多的关系。用户实体拥有这两个实体。只有在同一用户拥有区域和优惠的情况下,才能将它们关联起来。图表会很有帮助。多谢了。