- 기본 카테고리

siaction
- 작성일
- 2021.2.21
JPA 퀵스타트
- 글쓴이
- 채규태 저
루비페이퍼
따라가기 쉽게 잘 정리되어있어서, 책을 끝가지 마칠 수 있었습니다.
마지막 장은 좀 테스트 코드를 추가하면서 하면 좋았는데, 그렇게까진 못하였네요.. ㅠㅠ
연관관계 부분은 아리송한 부분이 있는데, 해깔리는 부분은 한번 더 읽어보려고 합니다.
책 잘 읽었습니다. 감사합니다.
개정판이 나온다면 희망 의견
- main 메서드 테스트 대신 JUnit으로 동작을 테스트하는 식으로 진행하면 좋을 것 같습니다.
- 프로젝트 설정시 JUnit 4 또는 5가 기본 사용가능한 상태가 되어, 사용이 어렵지는 않을 것 같습니다.
- 나중에 Scanner로 입력을 받는 예제가 등장하는데.. 이부분은은 JUnit5의 @ParameterizedTest 로 처리하긴했습니다.
- Java 8 이상의 Lamda 식이나, 최신 날짜 클래스를 사용하면 좋을 것 같습니다
- 책에서도 OpenJDK 13으로 사용하기 때문에, 적어도 Java 8의 기능을 사용하는 식으로 가이드가 되면 좋을 것 같습니다.
- 하이버네이트 요즘 버전에서는 Java 8의 LocalDate, LocalDateTime을 그대로 사용할 수 있음.
- * 반복 부분들을 람다 식으로 바꿔봐도 좋을것 같습니다.
- p362~365 까지 log4j 추가가 있는데, 아래 내용이 들어가거나 변경되면 좋을 것 같습니다.
- log4j2 slf4j기반으로 가이드가 되면 좋을 것 같음
- 로거 이름을 org.hibernate.type 까지보다는 org.hibernate.type.deor.sql.BasicBinder 까지 지정하고 레벨을 TRACE 로 유지했을 때, 바인딩로그만 보여서, 괜찮긴 했던 것 같습니다. 이부분 먼저 알려주셔도 좋을 것 같습니다.
- p471 :부서정보가 없는 직원을 검색하는 것에 대해서는, dept(s_dept)에 대한 fetch 없이 s_emp.dept_id 가 NULL인 것만 확인하면 되기 때문에, 일부러 FETCH문을 포함할 필요가 없을 것 같습니다.
- p490 : trim 함수 사용부분에 Character.valueOf('부')로 되어있는데.. '부'로만 써도 될 것 같습니다.
- p495 : 컬렉션 함수 이용하기 도입부 설명에서 GROUP BY 절과 HAVING 절을 이용했다고 적혀있는데, 실제로 JOIN하고 서브쿼리로 쿼리가 실행되어서, 조금 설명이 해깔리는 것 같습니다.
- p526 ~ 529
- failed to lazily initialize a collection of role 관련 예외에 대해서, 부서 조회후 트랜젝션이 끝난 상태에서, 거기에 속한 직원을 조회하려해서 저런 예외가 난 것 같습니다.
부서 조회와 내부의 직원 컬렉션을 조회하는 부분을 트랜젝션 범위에 둔뒤에 실행할 때는 예외가 발생하지 않았습니다.
부서가 소유한 직원컬렉션을 EAGER 전략으로 사용하는 것외에도 트랜젝션 관련 설명이 추가되면 좋을 것 같습니다.
- failed to lazily initialize a collection of role 관련 예외에 대해서, 부서 조회후 트랜젝션이 끝난 상태에서, 거기에 속한 직원을 조회하려해서 저런 예외가 난 것 같습니다.
- 마지막 9장의 마크업
- 단순하기 때문에, HTML5 기반에 스타일도 단순하게 인라인으로 집어넣어 예제를 만들어주셔도 좋을 것 같습니다.
저는 진행하면서 HTML5에 인라인 css로 바꾸거나하였어요.
- 단순하기 때문에, HTML5 기반에 스타일도 단순하게 인라인으로 집어넣어 예제를 만들어주셔도 좋을 것 같습니다.
- 진행을 Gradle로 했었는데, 괜찮아보였습니다.Gradle로의 빌드도 한번 검토해주셔도 좋을 것 같습니다.
정오표
- p175 : 동기화 잡업 -> 동기화 작업
- p470 :
- le(), lessThanOrEqualTo() 항목
- 메서드는 맞는데, 값만 25400.00 에서 121500.00 으로 변경필요.
- lessThan() 항목
- builder.graterThan(emp.<Double>.get("salary"), 25400.00) -> builder.lessThan(emp.<Double>.get("salary"), 121500.00)
- p474 : 주석 부분에서 AND emp.salary >= 5000/00 의 우변 값 부분을 35000.00 으로 변경
- p507 : 공퉁으로 -> 공통으로
- p609, p636, 637 : 영속성 유닛 설정 이름 부분 "RubbyShopping" -> "RubyShopping", "RubbyShoppingClient" -> "RubyShoppingClient"
- rubby 란 단어가 알콜중독자란 뜻이 있어서 고치는게 나을 것 같습니다.
- p618 : reduceStock 함수에서 'if (quantity < 0)' 조건에 this를 붙여야함. this를 붙이지 않으면 파라미터 값을 사용해서 항상 양수가 되어,
재고 수량 부족에대한 처리가 오동작함. - p624 : Hibernate 쿼리실행결과에서, Item엔티티의 테이블 명을 S_ITEM으로 설정했다면.. Item 엔티티의 테이블 생성구문, 외래키 설정 구문에 나타난 테이블 이름 들이 S_ITEM으로 나와야할텐데, S_ORDER_PRODUCT 로 표시되어있습니다.
기타
- Gradle
- Windows 8.1 과 Gradle 6.4.1 이상에서 빌드 문제가 있음.
- 빌드시 계속 데몬을 실행시켜, Java프로세스가 무한정 늘어남..
- 6.4 버전까지는 이슈 없음.
- IntelliJ
- JPA Console로 SELECT조회하면 persistence.xml의 hibernate.hbm2ddl.auto=create 설정을 다시 읽어서 조회를 하는지? DB의 데이터가 삭제됨
- DB에서 S_EMP와 S_DEPT를 제거하고 JPA Console로 Employee를 조회했을 때, 테이블이 생기는것을 확인함, 그동안 못느꼈던 원인은 아마도 update되어있던 상태였태 였었을 것 같습니다..
- MyBatis 파트는 SqlSession만 만들어서 아래 /mybatis-dynamic-sql 라이브러리로 테스트
- https://mybatis.org/mybatis-dynamic-sql/docs/quickStart.html
- 좋아요
- 6
- 댓글
- 0
- 작성일
- 2023.04.26
댓글 0
댓글이 없습니다.
첫 번째 댓글을 남겨보세요.