programing

휴지 상태 타임스탬프 - 밀리초 정밀도

firstcheck 2022. 12. 27. 21:49
반응형

휴지 상태 타임스탬프 - 밀리초 정밀도

타임 스탬프를 밀리초의 정밀도로 보존하는 것은, 휴지 상태에서는 이미 알고 있는 문제인 것 같습니다.처음에 db의 내 필드는 timestamp(3)로 설정되어 있었지만, datetime(3)도 시도해 보았습니다만, 유감스럽게도 차이가 없었습니다.

Timestamp와 Date 클래스를 사용해 보고, 최근에는 joda-time 라이브러리를 사용하기 시작했습니다.그 모든 노력에도 불구하고, 저는 여전히 밀리초의 정확도로 타임스탬프를 저장할 수 없었습니다.

클래스에 대한 매핑에는 다음 속성이 포함됩니다.

<property name="startTime" column="startTime"    type="org.jadira.usertype.dateandtime.joda.PersistentDateTime" length="3" precision="3" />

커스텀 정의 사투리 클래스

public class MySQLQustomDialect extends MySQL5InnoDBDialect{
    protected void registerColumnType(int code, String name) {
        if (code == Types.TIMESTAMP) {
            super.registerColumnType(code, "TIMESTAMP(3)");
        } else {
            super.registerColumnType(code, name);
        }
    }
}

db에 수동으로 데이터를 입력하면 hibernate가 서브세컨드 부분을 가져옵니다.

이 문제를 해결할 방법이 있나요?

혹시 MySQL Connector/JDBC 드라이버를 MariaDB 5.5와 함께 사용하고 계십니까?

Connector/J는 보통 서버가 충분히 새로운 것을 검출했을 경우에만 밀리초 부품을 서버에 송신하고, 이 검출에 의해 서버의 버전이 >= 5.6.4 인 것을 확인합니다.이것은 분명히 MariaDB 5.5.x에서는 올바르게 동작하지 않습니다.

Connector/J 소스의 관련 부분은 다음과 같습니다.

http://bazaar.launchpad.net/~mysql/connectorj/5.1/view/head:/src/com/mysql/jdbc/PreadedStatement.java#L796

MariaDB의 자체 JDBC 드라이버(MariaDB Java Client)를 사용하면 도움이 될 수 있지만(시도하지 않았습니다), 연결 문자열에 useServerPrepStmts=true를 추가하면 Connector/J에서도 작동한다는 것을 우연히 알게 되었습니다.

언급URL : https://stackoverflow.com/questions/23142614/hibernate-timestamp-millisecond-precision

반응형