【问题标题】:Spring Data JPA: How to get the data from a nested 1-to-1 relationship?Spring Data JPA:如何从嵌套的一对一关系中获取数据?
【发布时间】:2021-11-30 10:35:25
【问题描述】:

我相对于 new 到 spring 数据 jpa 但我一直在使用 ormtypescript 世界 (typeorm/mikrorm)。我在BookPicture 之间有一个简单的1-to-1 uni-directional 关系。

我的书实体

public class Book implements Serializable {
    ...
    @JsonIgnore
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="picture_id", nullable = false)
    private Picture picture;
}

图片实体

public class Picture implements Serializable {
    ....
    @Id
    private Long id;
    @Column(nullable = false)
    private String url;
}

所以我已经创建了我的服务并且我能够将数据保存到数据库中。对于数据库,我使用的是在我的本地机器上运行的mysql

在我的控制器中,在GetMapping 上,我想获取带有图片的书,例如,当我在http//:127.0.0.1/api/v1/books/book/1 访问服务器时,我想得到以下响应:

邮递员

{
    "id": 4,
    "title": "book1",
    "picture":{
        "id": 1,
        "url": "url1" 
    }
}

相反,我得到以下响应:

{
    "id": 4,
    "title": "book1"
}

这是我在BookController.java 中尝试过的,但它似乎不起作用,在某些时候我没有得到这本书的picture 对象。

@RestController
@RequestMapping(path = "/api/v1/books")
@RequiredArgsConstructor
public class BookController {
    private final BookService bookService;
    private final PictureService pictureService;
....

    @GetMapping("/book/{bookId}")
    public ResponseEntity<Book> getBook(@PathVariable("bookId") Long bookId){
        return ResponseEntity.status(200).body(this.bookService.getBook(bookId));
    }

}

【问题讨论】:

  • 如果您调试您的应用程序,您是否检查过book.getPicture() 是否为null?你可以“延迟加载”图片吗?

标签: java spring spring-boot spring-mvc spring-data-jpa


【解决方案1】:

那是因为您告诉杰克逊忽略该属性。只需删除@JsonIgnore 注释

【讨论】:

  • 那是我错过的东西,谢谢你现在工作得很好,你是我的新英雄
  • 是的,在双向关联的情况下,您应该忽略一侧以避免在序列化时出现该错误。
猜你喜欢
  • 1970-01-01
  • 2019-01-24
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 2020-01-25
  • 2017-08-19
相关资源
最近更新 更多