사용자 도구

사이트 도구


java:hibernate:4

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:hibernate:4 [2013/05/16 09:52]
kwon37xi
java:hibernate:4 [2015/07/06 10:27] (현재)
kwon37xi [Statement 2중 close 문제]
줄 4: 줄 4:
   * [[http://blog.springsource.org/2012/04/06/migrating-to-spring-3-1-and-hibernate-4-1/|Spring 3.1 and Hibernate 4.1]]   * [[http://blog.springsource.org/2012/04/06/migrating-to-spring-3-1-and-hibernate-4-1/|Spring 3.1 and Hibernate 4.1]]
   * [[http://www.javacodegeeks.com/2013/05/hibernate-4-with-spring.html|Hibernate 4 with Spring]]   * [[http://www.javacodegeeks.com/2013/05/hibernate-4-with-spring.html|Hibernate 4 with Spring]]
 +
 +===== 문제점 =====
 +
 +==== Statement 2중 close 문제 ====
 +** 최신 버전에서는 4.2.x, 4.3.x 모두 해결된 상태이다.**
 +
 +현재 4.2.15버전에서 <del>Comoposite Key 사용시에</del> Insert 등의 작업시에 closed statement에 대해 getWarnings를 호출하는 문제가 있어보인다. 예외를 잡아서 debug로그로 남기고 그냥 넘어가기 때문에 실질적인 문제는 안되지만 성능상 안 좋아보인다. 
 +
 +[[https://hibernate.atlassian.net/browse/HHH-9174|HHH-9174]] 로그 레벨을 체크하여 필요할 경우에만 로그를 찍게 수정되었다. 그러나 근본적인 문제는 Statement가 이미 close 된 상태에서 아래 메소드를 호출한다는 점이다.
 +
 +''org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch#addToBatch.addToBatch''에서 statement를 두번 release 한다. [[https://hibernate.atlassian.net/browse/HHH-8952|HHH-8952 NonBatchingBatch releases statements twice]] -> [[https://hibernate.atlassian.net/browse/HHH-8853|Hibernate 4.3.2에서 수정됨]] 그러나 4.2.x 에서는 그대로 남아있는 상태.
 +
 +org.hibernate.engine.jdbc.spi.SqlExceptionHelper#handleAndClearWarnings(java.sql.Statement, org.hibernate.engine.jdbc.spi.SqlExceptionHelper.WarningHandler)
 +<code java>
 +// See HHH-9174.  Statement#getWarnings can be an expensive call for many JDBC libs.  Don't do it unless
 +// the log level would actually allow a warning to be logged.
 +if (LOG.isEnabled(Level.WARN)) {
 +    try {
 +        walkWarnings(statement.getWarnings(), handler);
 +    } catch (SQLException sqlException) {
 +        // workaround for WebLogic
 +        LOG.debug("could not log warnings", sqlException);
 +    }
 +}
 +</code>
 +
 +4.2버전에서 단기 해결책은 로그 레벨을 ERROR로 변경하는 것이다.
 +<code groovy>
 +// logback의 경우
 +logger('org.hibernate.engine.jdbc.spi.SqlExceptionHelper', ERROR)
 +</code>
java/hibernate/4.1368665558.txt.gz · 마지막으로 수정됨: 2013/05/16 09:52 저자 kwon37xi