2012-03-22 3 views
15

저는 java, mysql, hibernate (3.6.x)를 사용하고 있습니다. 자바 측에서 java.sql.Timestamp 객체를 사용하고 있습니다. mysql 쪽에서 datetime 열을 사용하고 있습니다.최대 절전 모드 강제로 타임 스탬프를 UTC로 유지 /로드

시스템/java/mysql 시간대에 관계없이 최대 절전 모드로 UTC 시간대를 사용하여이 Timestamp 개체를 저장 /로드하고 싶습니다.

"How to store date/time and timestamps in UTC time zone with JPA and Hibernate"은 유익했지만 찾을 수없는 최종 구현 정보가 부족했습니다.

해당 스레드에 표시된대로 UtcTimestampTypeDescriptor를 구현하고 일반 TimestampTypeDescriptor 대신이 값을 사용하도록 최대 절전 모드를 구성하려고합니다.

어떻게 기본 타임 스탬프 유형 대신 UtcTimestamp 유형을 사용하도록 최대 절전 모드를 구성 할 수 있습니까?

+1

왜 https://community.jboss.org/wiki/UserTypeForNon-defaultTimeZone을 구현하려고하고 구체적인 질문과 함께 제공되지 않습니다. – ManuPK

+0

간단한 사용자 유형을 구현하고 모든 날짜/tiemstamp 특성에 주석을 달고 싶지는 않습니다. 대신 Descriptor를 구현하여 기본 timstamp 설명자 대신 최대 절전 모드로 등록하려고합니다. 가장 중요한 질문은이 유형을 최대 절전 모드로 등록하여 어디에서이 모드를 기본 설정으로 대체 할 것인가입니다. – samz

+0

http://stackoverflow.com/questions/4725719/hibernate-typeresolver – samz

답변

3

가져 오기 your link
에서 클래스 public class UtcTimestampType extends TimestampType 및 확인이 코드

@org.hibernate.annotations.Type(type = "yourPackage.UtcTimestampType") 
public java.util.Date date;  

사용하여 주석

사용

또는

<property name="date" column="yourColumn" type="yourPackage.UtcTimestampType" /> 

* .hbm.xml

+1

나는 가지고있는 모든 날짜/타임 스탬프 속성에 주석을 달지 않습니다. 최대 절전 모드가 기본 유형 대신 항상 UTCTimestampType을 사용하도록하고 싶습니다. – samz

+0

불가능합니다. UTCTimestampType은 사용자 정의 사용자 유형입니다. 원하는 경우, 당신은 Hibernate의 라이브러리를 풀고 그것을 해킹 할 수있다. – Ilya

+0

이 예제에서, 최대 절전 모드 3.6 예제를 살펴보십시오. 유형이 아닌 설명자의 예가 있습니다. 그런 다음 앱이 시작되면 기본 유형 대신이 유형을 등록 할 수 있지만 방법/위치는 말하지 않습니다. 기본적으로 내 질문입니다. – samz

19

대안에 유형을 최대 절전 모드 사용자 정의 구현하면 JDBC 연결 URL에 다음 JDBC 옵션을 추가하는 것입니다

useTimezone=true 
serverTimezone=UTC 

이는 UTC 시간대에 당신의 JDBC 연결을 강제하고, JVM의 시간대에서 변환을 수행하기 위해 MySQL을 요청합니다. 실제 효과는 DATETIME 열이 UTC로 유지되는 동안 JVM에서 로컬 시간대 (예 : 로그 메시지 인쇄 등)를 유지할 수 있다는 것입니다. 예를 들어

:

<bean id="hibernateAnalysisSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="hibernateProperties"> 
     <props> 
      <!-- Connection parameters --> 
      <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop> 
      <prop key="hibernate.connection.url">jdbc:mysql://hostname/databaseName?useTimezone=true&amp;serverTimezone=UTC</prop> 
      ... 
+1

고마워요. 그것은 매력처럼 작동합니다. :) –