사용자 도구

사이트 도구


java:hibernate:gotchas

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
다음 판 양쪽 다음 판
java:hibernate:gotchas [2017/11/30 22:13]
kwon37xi [hashCode와 equals를 항상 구현한다]
java:hibernate:gotchas [2017/11/30 22:17]
kwon37xi [쿼리 로그를 남겨라]
줄 8: 줄 8:
 이유는 Set등에 신규 객체를 넣을 경우 신규 객체는 아직 프라이머리키가 지정되지 않은 상태이기 때문에 ID가 모두 ''null'' 혹은 ''0''이며 이 경우 Set에 저장할 때 equals가 항상 true 여서 이전의 값을 뒤에 저장한 값이 계속 덮어써버리는 현상이 발생하기 때문이다. 이유는 Set등에 신규 객체를 넣을 경우 신규 객체는 아직 프라이머리키가 지정되지 않은 상태이기 때문에 ID가 모두 ''null'' 혹은 ''0''이며 이 경우 Set에 저장할 때 equals가 항상 true 여서 이전의 값을 뒤에 저장한 값이 계속 덮어써버리는 현상이 발생하기 때문이다.
  
-하지만 실제로 해보면 인공키를 hashCode의 기준으로 삼을 수 밖에 없는 경우도 많다. 조심해야 한다.+하지만 실제로 해보면 인공키를 hashCode의 기준으로 삼을 수 밖에 없는 경우도 많다. Set/Map 과 함께 사용할 때 주의를 기울여야한다.
  
 따라서 ID를 equals/hashCode의 기준으로 삼을 경우 매우 주의해야 한다. 관련 참조 - [[http://community.jboss.org/wiki/EqualsAndHashCode|Hibernate equals and hashCode]] 따라서 ID를 equals/hashCode의 기준으로 삼을 경우 매우 주의해야 한다. 관련 참조 - [[http://community.jboss.org/wiki/EqualsAndHashCode|Hibernate equals and hashCode]]
줄 32: 줄 32:
 항상 **템플릿 엔진의 주석(JSP의 경우 <%-- --%>)을 사용하라.** 항상 **템플릿 엔진의 주석(JSP의 경우 <%-- --%>)을 사용하라.**
  
-===== 쿼리 로그를 남겨라 =====+===== 개발 환경에서는 쿼리 로그를 남겨라 =====
 <code properties> <code properties>
 hibernate.show_sql=true hibernate.show_sql=true
줄 40: 줄 40:
 [[java:hibernate:log|Hibernate Log 남기기]]를 참조한다. [[java:hibernate:log|Hibernate Log 남기기]]를 참조한다.
  
 +단, 실 운영환경에서는 로그를 남기는 순간 매우 느려지므로 로그 레벨을 높여야 한다.
 ===== 쿼리에 진짜로 ":"로 들어간다면? ===== ===== 쿼리에 진짜로 ":"로 들어간다면? =====
 Native SQL에 '':''를 넣어야 할 필요가 있다면 Escape을 해줘야 한다. Native SQL에 '':''를 넣어야 할 필요가 있다면 Escape을 해줘야 한다.
java/hibernate/gotchas.txt · 마지막으로 수정됨: 2023/07/03 14:54 저자 kwon37xi