为了账号安全,请及时绑定邮箱和手机立即绑定

一对多关系的问题

一对多关系的问题

慕虎7371278 2023-03-31 16:41:38
我对一对多的关系有问题,我只想使用用户 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 来引用它
查看完整描述

3 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

您的实体结构很好。您必须从实体中检索用户UserRepository并将其分配给实体Favorite。恕我直言,请介绍一下 FavoriteDTO 类。所以实体模型不会暴露。


FavoriteDTO.java

public class FavoriteDTO implements Serializable {

    private long id;

    private String element;

    long userId;

//getters and setters

}

您的服务实施应检查用户可用性,然后将其分配给Favorite实体。


ServiceImpl.java

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

   }

}

您更新后的 swagger 请求 json 如下所示


{

  "element": "string",

  "userId": long 

}


查看完整回答
反对 回复 2023-03-31
?
www说

TA贡献1775条经验 获得超8个赞

您需要检索现有用户并将其作为 favorite.user 对象放在那里(分配)。这样,它将起作用。

我不太清楚你的招摇规范。你在使用某种 json 模式吗?


查看完整回答
反对 回复 2023-03-31
?
12345678_0001

TA贡献1802条经验 获得超5个赞

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


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


@ManyToOne(cascade = CascadeType.DETACH)

@JoinColumn(name = "user_fk")

User user;


查看完整回答
反对 回复 2023-03-31
  • 3 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信