-
@JsonIgnorePropertiesSpring Boot 2021. 11. 11. 15:14
mariadb 에
SELECT * FROM image WHERE userId IN (SELECT toUserId FROM subscribe WHERE fromUSerId = 2);
쿼리를 작성하면,
2번이 구독하는 1,3 번의 image로부터 정보를 얻어낸다.
Image.java는 아래와 같다.
import java.time.LocalDateTime; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.PrePersist; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Builder @AllArgsConstructor @NoArgsConstructor @Data @Entity public class Image { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String caption; private String postImageUrl; @JoinColumn(name = "userId") @ManyToOne(fetch = FetchType.EAGER) private User user; private LocalDateTime createDate; @PrePersist public void createDate() { this.createDate = LocalDateTime.now(); } }
따라서 id, caption, postImageUrl, user 등의 정보를 얻을 수 있다.
그런데, 여기에 private User user;이 있어서,
User.java를 보니, 다음과 같다.
import java.time.LocalDateTime; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.PrePersist; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Builder @AllArgsConstructor @NoArgsConstructor @Data @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(length =100, unique = true) private String username; @Column(nullable =false) private String password; @Column(nullable=false) private String name; private String website; private String bio; @Column(nullable =false) private String email; private String phone; private String gender; private String profileImageUrl; private String role; @OneToMany(mappedBy = "user", fetch = FetchType.LAZY) @JsonIgnoreProperties({"user"}) private List<Image> images; private LocalDateTime createDate; @PrePersist public void createDate() { this.createDate = LocalDateTime.now(); } }
여기에, private List<Image> images;가 있다.
그런데 mariadb 쿼리에서
SELECT * FROM image WHERE userId IN (SELECT toUserId FROM subscribe WHERE fromUSerId = 2);
이렇게 이미 image로부터 정보를 불러오는 것이기 때문에,
User.java에서 또 image 정보들을 불러올 필요가 없다.
그래서 이를 무시하도록, Image.java에서
@JsonIgnoreProperties({"images"})
private User user;
이렇게 해주면 된다.
import java.time.LocalDateTime; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.PrePersist; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Builder @AllArgsConstructor @NoArgsConstructor @Data @Entity public class Image { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String caption; private String postImageUrl; // 이 부분 추가 @JsonIgnoreProperties({"images"}) @JoinColumn(name = "userId") @ManyToOne(fetch = FetchType.EAGER) private User user; private LocalDateTime createDate; @PrePersist public void createDate() { this.createDate = LocalDateTime.now(); } }
'Spring Boot' 카테고리의 다른 글
좋아요 버튼, 좋아요 수 구현 (0) 2021.11.16 좋아요 버튼 만들기 (0) 2021.11.16 페이지 스크롤 (0) 2021.11.12 페이징 처리 (0) 2021.11.12 ResponseEntity (0) 2021.10.27