Spring Data JPA:如何从嵌套的一对一关系中获取数据?
Spring Data JPA: How to get the data from a nested 1-to-1 relationship?
我相对 new
与 spring 数据 jpa
但我一直在 typescript
世界中与 orm
一起工作(typeorm/mikrorm).我在 Book
和 Picture
.
之间有一个简单的 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
访问服务器时,我想得到以下响应:
Postman
{
"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));
}
}
那是因为你让 Jackson 忽略那个 属性。只需删除@JsonIgnore 注释
我相对 new
与 spring 数据 jpa
但我一直在 typescript
世界中与 orm
一起工作(typeorm/mikrorm).我在 Book
和 Picture
.
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
访问服务器时,我想得到以下响应:
Postman
{
"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));
}
}
那是因为你让 Jackson 忽略那个 属性。只需删除@JsonIgnore 注释