【发布时间】:2021-11-30 10:35:25
【问题描述】:
我相对于 new 到 spring 数据 jpa 但我一直在使用 orm 在 typescript 世界 (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 访问服务器时,我想得到以下响应:
邮递员
{
"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