기본적인 @ID나 @GeneratedValue등은 설명을 생략하겠다.
대용량 데이터를 받을떄 사용하는 어노테이션으로 html을 받을떄에 자주 사용된다.
DB에서 USER에 접근할떄 입력되는 이름을 지정(필드값)
-> 사용을 안해야 하는 경우가 있는데 그것은 데이터의 1정규화가 위반될떄
이것은 부가적인 설명에서 다뤄보겠다.
이처럼 User을 참조하는 값의 @JoinColumn의 이름을 userId로 지정하면
테이블을 생성할떄 필드값이 userId가 된다.
Column의 default값을 설정할수 있는 어노테이션이다.
class들을 참고하면 알겠지만 " " 은 어떤 타입이든 들어가야 하며 String 값은 ' '이 추가되어 들어가게 된다.
시간을 자동으로 입력해주는 어노테이션이다.(now 값이다)
이처럼 연관관계를 지정해주면 테이블에서 표기가 된다.
-> @JoinColumn에서 지정한 필드값으로 입력이 된다는것을 알수가 있다.
연관관계 주인 = FK를 가진 오브젝트
만약 우리가 Board(id=1) 인값을 호출하고 싶다면 User의 값 또한 호출이 되게 된다.
만약 Reply의 정보도 가져오고 싶다면 마찬가지고 연관관계를 맺어주면 된다.
** 어떻게 보면 굉장히 유용하지만 성능이 많이 낮아진다..(가져오는 데이터가 많아서)
만약 Reply의 값을 가져 오게 된다면
Board(1)의 값에 User(1)의 값이 올수 있게 되지만
Reply의 값은 여러개가 올수가 있다.
하나의 게시글에 많은 댓글이 달릴수 있기 떄문에
그러기 떄문에 Fk의 값을 가져올 필요가 없으니 Reply에서는 @JoinColumn을 추가하지 않아야 한다.
이와 같이 사용한다.
대신 mappedBy를 추가해주어야 한다.
" " 안에는 Reply에서 Board를 참조하는 변수명을 입력해 준다.
이 내용을 통해서 FetchType을 설명할수가 있는데
LAZY 타입은 OneToMany의 기본타입이며
EAGER타입은 ManyToOne의 기본타입이다
Project 구성은 한페이지에 게시글, 작성자, 댓글을 모두 보이게 할것이기 떄문에 Reply연관관계를 EAGER타입으로 지정하였다.
정말 간단하게 설명을 하자면 중간 유통업체 이다.
만약 java에서 파이썬쪽으로 데이터를 전송하게 되면
java언어 -> java 언어를 json변환 -> 파이썬 도착 -> json을 파이썬 언어로 변환 -> 데이터 활용
이렇게 중간 통신에서 공통적으로 이용되는 형태를 json이라고 한다.
통신을 한다고 하면 java 언어를 json형태로 전송을 한다라는 의미이다.
많이 해보았기 떄문에 skip 하겠다.
강의내용중 하나 모르는점은 @ColumnDefault("''")이것이다.
나는 User의 role이라는 변수가 default일떄 user를 부여하게 했었는데
이게 작동을 하려면 쿼리에 role값이 나오면 안된다.
이런 쿼리가 나와야 @ColumnDefault이 작동을 하게 된다.
이런 쿼리가 나오게 하기 위해서 @DynamicInsert를 사용 한다.
-> class에 부여하는 어노테이션으로 insert할떄 null인 field를 제외 시켜준다.
@DynamicInsert을 User class에 넣어준다면 insert할떄에 role가 나오지 않게 된다.
하지만 이런 어노테이션을 사용하게 된다면 코드가 지저분해기 떄문에 그냥 간단하게 @ColumnDefault 와 @DynamicInsert를 둘다 사용하지않고
값을 저장하기 전에 직접 값을 저장해주면 된다.
하지만 이 방법도 개발자가 코드를 짜면서 실수를 할수 있기 떄문에 enum을 사용하는것이 가장 효율적이다.
enum을 사용하는 방법은 코드를 직접 보는것이 좋을 것 같다.
깃 허브 주소 : https://github.com/HoJin-jjimgo/Project-blog