首页 > 解决方案 > Spring Data JPA:如何从嵌套的一对一关系中获取数据?

问题描述

我相new对于弹簧数据jpa,但我一直ormtypescript世界范围内工作(typeorm/mikrorm)。我在 a和 a1-to-1 uni-directional之间有一个简单的关系。BookPicture

我的书实体

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));
    }

}

标签: javaspringspring-bootspring-mvcspring-data-jpa

解决方案


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


推荐阅读