ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • @JsonIgnoreProperties
    Spring 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

    댓글

Designed by Tistory.