簡體   English   中英

一對多關系的問題

[英]Problems with the relationship of one to many

我在一對多關系中存在問題,要關聯我只想使用用戶ID我不想創建新的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即可引用它

您需要創建一個新用戶或檢索任何現有用戶並在“收藏夾”對象中進行設置。 如果存在favorite.user.id,則不會創建新用戶。

甚至您也應該將Cascade設置為CascadeType.DETACH,以避免從喜歡的對象創建或更新User對象。 如果favourite.user.id為null,而不是創建一個新的用戶對象,它將拋出錯誤。

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

您需要檢索現有用戶並將其作為收藏夾.user對象放置(分配給它)。 這樣,它將起作用。

您的招搖規格我不太清楚。 您是否使用某種json模式?

您的實體結構很好。 您必須從UserRepository檢索用戶並將其分配到“ Favorite實體中。 恕我直言,請介紹FavoriteDTO類。 因此實體模型不會被公開。

最喜歡的DTO.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 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM