초록색 - 자바 객체,
빨간색 - 엔티티 객체(테이블객체)
어노테이션 설정 목적- 엔티티 한 행과 객체하고 항상 같은 값을 유지하기 위해서 쓴것.
테이블간의 관계만 연결되어있고
객체와 객체의 관계를 연결해줘야한다.
한테이블에서 다른 테이블을 찾을 수 있도록
게시글 하나를 쓴 고객은 누구다 하고 찾을 수 있도록,
고객 한사람이 쓴 게시글은 어떤것들이다 하고 찾아낼 수 있도록...!
엔티티와 엔티티들과의 관계(테이블과의 관계) - 이미 양방향 처리가 되어있다.
자 이제 엔티티간의 관계는 무조건 양방향이 아니다.
우리가 설정을 해줘야하는데
단방향인지 양방향인지 설정해줘야한다.
게시글 입장에서 쓴 고객이 누구인지 찾게
고객 입장에서 한 고객이 어떤 게시글들을 썼는지 has-a관계로 표시...
한쪽에서만 바라보기 때문에 단방향 연관관계라고 한다.
(한쪽에서 다른 한쪽을 has-a 관계로 갖고 있는 경우)
양방향 관계
게시글을 쓴 고객이 누구인지 has-a
고객이 쓴 게시글들이 어떤것들이 있는지 has-a 관계로 표시..
엔티티 객체와 엔티티 객체 사이에 단방향이든, 양방향이든 관계를 표시해줘야한다.
그런데, 누가 누구를 has-a로 갖게 할까?
예) 게시판 b, 고객 c
b 클래스가 c 클래스를 has-a 로 가질 때
으아아악에러
- BeanCreationException: Error creating bean with name
엔티티 매니저가 hibernate context를 관리해주는데 그걸 만들지 못함!- Unable to build Hibernate SessionFactory;
- Could not determine type for: com.my.entity.C, at table: b_tbl, for columns: [org.hibernate.mapping.Column(bc)]
@Column 어노테이션을 설정하지 않으면 멤버변수와 같은 이름의 컬럼이 자동 만들어진다.
오라클에서 C 클라스의 타입을 어떤걸로 매핑해야할 지 모르겠다.
해결 @ManyToOne
b 클래스는 Many, c 클래스는 One의 입장이다.
B 테이블에 컬럼이 하나 만들어져있음
- BC_C_ID 같은 컬럼명이 아닌 다른 컬럼명을 쓰고싶다면,
isEmpty() 비었는가 - null인 경우
isPresent() 존재하는가 - null이 아닌경우
에러
find() 할 때 그 즉시 자식 자료를 가지고 오고 싶다면 기본 fetch 값을 eager로 바꿔야한다.