一对多关系的问题

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


@PostMapping("/createFavorite")

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


        return new ResponseEntity<Favorite>(userServiceImpl.createFavorite(favorite), HttpStatus.OK);

    }

我最喜欢的实体是


public class Favorite implements Serializable {


    @Id

    @GeneratedValue(strategy = GenerationType.AUTO)

    private long id;


    @Column(name = "element")

    private String element;


    @ManyToOne

    @JoinColumn(name = "user_fk")

    User user;

我大摇大摆地明白了


{

  "element": "string",

  "user": {

    "email": "string",

    "id": 0,

    "life": "suspend",

    "name": "string",

    "password": "string"

  }

}

我不想创建新用户,用户已经创建,我只需要使用您的 ID 来引用它


慕虎7371278
浏览 111回答 3
3回答

明月笑刀无情

您的实体结构很好。您必须从实体中检索用户UserRepository并将其分配给实体Favorite。恕我直言,请介绍一下 FavoriteDTO 类。所以实体模型不会暴露。FavoriteDTO.javapublic class FavoriteDTO implements Serializable {&nbsp; &nbsp; private long id;&nbsp; &nbsp; private String element;&nbsp; &nbsp; long userId;//getters and setters}您的服务实施应检查用户可用性,然后将其分配给Favorite实体。ServiceImpl.javapublic void createFavorite(FavoriteDTO favoriteDTO) {&nbsp; &nbsp;Optional<User> optional = userRepository.findById(favoriteDTO.getUserId());&nbsp; &nbsp;if(optional.isPresent()) {&nbsp; &nbsp; &nbsp; &nbsp;Favorite favorite = new Favorite();&nbsp; &nbsp; &nbsp; &nbsp;favorite.setUser(optional.get());&nbsp; &nbsp; &nbsp; &nbsp;favoriteRepository.save(favorite);&nbsp; &nbsp;}}您更新后的 swagger 请求 json 如下所示{&nbsp; "element": "string",&nbsp; "userId": long&nbsp;}

www说

您需要检索现有用户并将其作为 favorite.user 对象放在那里(分配)。这样,它将起作用。我不太清楚你的招摇规范。你在使用某种 json 模式吗?

12345678_0001

您需要创建一个新用户或检索任何现有用户并设置收藏夹对象。如果存在 favorite.user.id,则不会创建新用户。甚至您应该将 Cascade 设置为 CascadeType.DETACH 以避免从收藏对象创建或更新用户对象。如果 favorite.user.id 为 null 而不是创建新的用户对象,它将抛出错误。@ManyToOne(cascade = CascadeType.DETACH)@JoinColumn(name = "user_fk")User user;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java