개발일지/2023_한이음
[개발]🚨ERROR - 객체vs기본 자료형의 불일치
기억지기 개발자
2023. 6. 12. 15:06
🛤️현상

public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; //이 오브젝트의 아이디
private String title;
private String content;
private Long category;
@ManyToOne
@JoinColumn(name = "userId")
@JsonIgnore
private User user;
.
.
.
}
이런 식으로 Board entity가 있는데 여기서 주목해야 할 부분은 user 필드이다.
이 필드의 자료형은 User라는 entity 클래스이다. 자료형을 객체로 지정하면 JPA가 알아서 그 객체의 pk를 가지고 온다고 한다. 그래서 user 필드에서 DB에 들어가는 실질적 값은 Long 타입이 된다. (왜냐하면 User 클래스에 pk의 자료형은 Long이니까)
🗝️해결
@Transactional
public List<Board> update(final BoardDTO dto) {
Board board = boardRepository.findById(dto.getId())
.orElseThrow(() -> new IllegalArgumentException("게시글이 존재하지 않습니다."));
validate(board);
board.updateBoard(dto);
return retrieve(board.getUser().getUid());
}
여기에서 return 값을 보면 board.getUser().getUid() 라고 되어있는데 이는 board 객체의 user이라는 필드를 가지고 오는데, 그전에 user의 자료형이 User 객체이니 거기에 있는 속성인 uid를 가지고 온다는 것이다.
(신기한 이유는 user 객체 생성을 하지 않았는데 user라는 필드의 getter를 이용해서 User entity에 접근할 수 있다는 것이다.)
이게 뭐 어쩌라는 건지... 싶을 수 있지만 나는 이렇게 두 번 .을 찍고 들어가는 걸 자주 경험해 본 적이 없고, User라는 자료형을 사용하면서 그 클래스의 필드값도 가지고 올 수 있다는 것도 나에게는 신기한(?) 경험이었다.
