Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一对多关系的问题_Java_Spring_Swagger Ui - Fatal编程技术网

Java 一对多关系的问题

Java 一对多关系的问题,java,spring,swagger-ui,Java,Spring,Swagger Ui,我在一对多的关系上有问题,为了关联我只想使用用户ID我不想创建一个新的,我把我的代码 @PostMapping("/createFavorite") public ResponseEntity<Favorite> createFavorite(@RequestBody Favorite favorite) { return new ResponseEntity<Favorite>(userServiceImpl.createFavorite(fa

我在一对多的关系上有问题,为了关联我只想使用用户ID我不想创建一个新的,我把我的代码

@PostMapping("/createFavorite")
    public ResponseEntity<Favorite> createFavorite(@RequestBody Favorite favorite) {

        return new ResponseEntity<Favorite>(userServiceImpl.createFavorite(favorite), HttpStatus.OK);
    }
我大摇大摆地明白了这一点

{
  "element": "string",
  "user": {
    "email": "string",
    "id": 0,
    "life": "suspend",
    "name": "string",
    "password": "string"
  }
}
我不想创建新用户, 用户已经创建,我只需要使用您的ID引用它

您需要检索现有用户并将其作为收藏夹放在那里。用户对象分配它。这样,它就会起作用


我不太清楚你的招摇过市的规格。您使用的是某种json模式吗

您需要创建一个新用户或检索任何现有用户并在收藏夹对象中进行设置。如果在favorite.user.id中存在,则不会创建新用户

甚至应该将Cascade设置为CascadeType.DETACH,以避免从收藏夹对象创建或更新用户对象。如果favorite.user.id为null而不是创建新的用户对象,则会引发错误

@ManyToOne(cascade = CascadeType.DETACH)
@JoinColumn(name = "user_fk")
User user;

你的实体结构很好。您必须从UserRepository中检索用户并将其分配到收藏夹实体中。我好,请把我最喜欢的介绍给同学们。因此实体模型不会公开

FavoriteDTO.java 您的服务实现应该检查用户可用性,然后将其分配给收藏夹实体

ServiceImpl.java
是否确实要使用实体类作为请求主体?您公开的表结构可能是一种安全性issue@Coder你的解决方案是什么,你能回答我为什么不创建一个收藏夹并使用它,而不是在请求中直接使用Faourite?这是要求吗?@Coder我应该使用此PathVariable?@Coder我可以使用PathVariable idUser和PathVariable nameFavorite吗?我可以使用PathVariable idUser和PathVariable nameFavorite吗?@asdww PathVariable在此处可见且不合适。无论何时创建或更新整个db对象,我们都会将其作为POST请求发送到RequestBody中,因此它在请求url中不可见。我可以使用PathVariable idUser和PathVariable nameFavorite吗?但在swagger中显示此用户:{email:string,id:0,life:suspend,name:string,password:string},我有一个结构controller->services->repository,在controller中我应该填写字段还是在service中?这是正确的。因为我们已经在Favorite类中定义了用户对象。如果您不想在FavoriteDTO中定义用户对象,可以定义userId字段。您能给我一个第二个选项的示例吗
@ManyToOne(cascade = CascadeType.DETACH)
@JoinColumn(name = "user_fk")
User user;
public class FavoriteDTO implements Serializable {
    private long id;
    private String element;
    long userId;
//getters and setters
}
public void createFavorite(FavoriteDTO favoriteDTO) {
   Optional<User> optional = userRepository.findById(favoriteDTO.getUserId());
   if(optional.isPresent()) {
       Favorite favorite = new Favorite();

       favorite.setUser(optional.get());
       favoriteRepository.save(favorite);
   }
}
{
  "element": "string",
  "userId": long 
}