본문 바로가기

분류 전체보기

(1196)
연관 관계 설정. 1) 각 엔티티에 해당하는 테이블 만들기. 2) Workbench 이용해서 foreign key 지정 3) @OneToMany라면 Many에 해당하는 쪽에서 One의 키를 가지고 있으므로 One의 객체들을 먼저 다 채워 주고, Many에서 그 객체를 찾아서 set 해준다. 4) read하는 방법은 가령 User로 부터 Category의 정보를 얻고자 한다면 User Entity -> OrderGroup -> OrderDetail -> Item -> Partner -> Category 이런식으로 타고 갈 수 있음. 한 명의 User가 여러개의 장바구니를 가지는데 장바구니 하나 당 여러개의 주문 내역이 있고 주문 내역 하나에는 하나의 아이템이 존재 ( 1 : N - N : 1) 이므로, 그 하나의 아이템에는..
백준 12764번 싸지방에 간 준하 (GG) 문제 현재 대한민국 해군에 소속되어있는 준하는 문제를 풀기 위해 매일같이 사이버 지식 정보방 통칭 싸지방에 다닌다. 그러나 최근 문제가 생겼다. 싸지방에 사람이 몰려 컴퓨터 수가 모자라게 된 것이다. 이런 사태를 도저히 용납할 수 없었던 준하는 곧 전역하는 선임을 설득해 민원을 넣도록 하는 데 성공했다. 마침내 부대에서는 민원을 받아들이기로 하였고, 컴퓨터를 증설하기로 했다. 또한, 컴퓨터 간의 사용률에 따라 다른 성능의 컴퓨터를 설치하고자 한다. 하지만 예산이 부족해 사람 수 만큼 컴퓨터를 살 수가 없었다. 고심에 고심을 거듭한 준하는 모든 사람이 항상 정해진 시간에 싸지방을 이용한다는 사실을 발견했다. 컴퓨터가 있는 자리에는 1번부터 순서대로 번호가 매겨져 있다. 모든 사람은 싸지방에 들어왔을 때 비..
백준 7569번 토마토 문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자모양 상자의 칸에 하나씩 넣은 다음, 상자들을 수직으로 쌓아 올려서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토에 인접한 곳은 위, 아래, 왼쪽, 오른쪽, 앞, 뒤 여섯 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게 되는지 그 최소 일수를 알고 싶어 한..
다양한 find 지원. Repository가 기본적으로 제공하는 것은 id로 찾는 방식인데 email, account등 다양한 정보로 찾기 위해서는 UserRepository 내부에 Optional findByAccount(String account); 등의 설정해 주면됨. 이렇게 하면 Test하는 쪽에서는 Repository를 사용하여 findByAccount를 사용 할 때, 반드시 Optional 로 받아야 함. 만약 UserRepository 내부에 User findByAccount(String account); 로 적어 주었다면 Test하는 쪽에서는 User로 받아야 함. Optional은 ifPresent()같은 메소드를 지원하므로 편한 감이 있음. JPA는 User 클래스 안에 지정된 변수에 대해서만 findBy제공..
@OneToMany (fetch type) , @ManyToOne OrderDetail 입장에서 자신은 N이고 User는 1. @ManyToOne 연관 관계 설정시에는 객체로 표시해야 함. 자신이 1 상대가 Many인 경우 @OneToMany이고 List로 받아올 수 있음. @OneToMany(fetch = FetchType.LAZY , mappedBy = "user") 어떤 칼럼으로 매핑할 것 인지 정할 때는 Many입장의 객체에서 자신을 1로 두고 매핑한 그 객체의 이름과 같게 해야 함. @Data @AllArgsConstructor @NoArgsConstructor @Entity @ToString(exclude = {"user","item"}) //lombok사용시 toString을 자동지정 해 주는데 //현재 OrderDetatil과 User,Item이 서로 상..
ERD user와 item의 관계를 생각해 보면 한명의 user는 여러개의 item을 가질 수 있고 하나의 item은 여러명의 user에게 선택 될 수 있다. 따라서 중간에 주문내역이라는 테이블을 통해 user-1: N - 주문 내역 - N : 1- item 이런 식으로 연결 시켜 줌. Mysql ERD 그리기 원하는 DB에서 테이블 만든 후에 database -> reverse engineer에서 관계 설정 해줌. 점선 -> 한쪽만 기본키로 가지는 경우 실선 -> 양쪽 다 기본키로 가지는 경우 그리고 forward engineer에서 완료 시켜주면 관계가 지정 되어 테이블 attribute가 새로 생기거나 하는 변화가 생김.
@Autowired , Bean @Autowired 일반적으로 private UserRepository userRepository = new UserRepository(); 이렇게 직접 객체를 만들어서 사용한 것이 일반적인데 @Autowired 사용 시 스프링이 직접 private UserRepository userRepository 라는 객체를 관리 하겠다는 의미 주입 받는 다는 것은 어떤 객체가 만들어 지고 그 속성은 내부에서 생겨나는 것이 아니라 외부에서 만들어진 것으로 부터 들어와서 입력되는 것 예를 들어 Car라는 객체에 Tire라는 class 변수가 있다고 하면 Tire는 Car class 내부에서 만드는 것이 아니고 Tire tr = new KoreaTire(); Car car = new Car(tr); 이런 식으로 주입되..
Assertions & Transactional 어노테이션 @Transactional 사용하면 roll back해줌 delete해도 수행은 정상적으로 이뤄지지만 마지막에 roll back으로 해당 데이터가 안 지워진채로 다시 남음. 테스트 용도로 적합. Many에 해당하는 Entity를 담은 List를 Stream을 통해 열람 하면서 read하는 테스트 작업 중에 오류가 발생할 수 있음. 이 때 Transactional 붙여 줘야 함. A - B - C 로 구성되 ERD 모델에서 A와 B에 대한 관계를 생각 할 때 A가 가진 B의 List를 뽑아서 그 안에 있는 C의 Id를 구하고자 한다면 이 과정과 동시에 A에 대해 C가 추가 된다면 무결성이 깨짐. 따라서 transactional로 atomic하도록 해줘야 함. Assertions 예시 @Test public..