문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 다음 판 양쪽 다음 판 | ||
java:hibernate:gotchas [2017/11/30 22:12] kwon37xi [hashCode와 equals를 항상 구현한다] |
java:hibernate:gotchas [2017/11/30 22:17] kwon37xi [쿼리 로그를 남겨라] |
||
---|---|---|---|
줄 5: | 줄 5: | ||
hashCode와 equals를 항상 구현해야 한다. | hashCode와 equals를 항상 구현해야 한다. | ||
- | 이때 DB Primary Key(ID)가 아닌 **항상 변치 않고 해당 객체를 대표하는 의미를 가질 수 있는 비즈니스 키(business key)를 hashCode와 equals의 대상으로 삼아야 | + | 이때 DB Primary Key(ID)가 아닌 **항상 변치 않고 해당 객체를 대표하는 의미를 가질 수 있는 비즈니스 키(business key)를 hashCode와 equals의 대상으로 삼도록 노력한다.** |
이유는 Set등에 신규 객체를 넣을 경우 신규 객체는 아직 프라이머리키가 지정되지 않은 상태이기 때문에 ID가 모두 '' | 이유는 Set등에 신규 객체를 넣을 경우 신규 객체는 아직 프라이머리키가 지정되지 않은 상태이기 때문에 ID가 모두 '' | ||
+ | |||
+ | 하지만 실제로 해보면 인공키를 hashCode의 기준으로 삼을 수 밖에 없는 경우도 많다. Set/Map 과 함께 사용할 때 주의를 기울여야한다. | ||
따라서 ID를 equals/ | 따라서 ID를 equals/ | ||
줄 30: | 줄 32: | ||
항상 **템플릿 엔진의 주석(JSP의 경우 <%-- --%>)을 사용하라.** | 항상 **템플릿 엔진의 주석(JSP의 경우 <%-- --%>)을 사용하라.** | ||
- | ===== 쿼리 로그를 남겨라 ===== | + | ===== 개발 환경에서는 |
<code properties> | <code properties> | ||
hibernate.show_sql=true | hibernate.show_sql=true | ||
줄 38: | 줄 40: | ||
[[java: | [[java: | ||
+ | 단, 실 운영환경에서는 로그를 남기는 순간 매우 느려지므로 로그 레벨을 높여야 한다. | ||
===== 쿼리에 진짜로 ":" | ===== 쿼리에 진짜로 ":" | ||
Native SQL에 '':'' | Native SQL에 '':'' |