2016-06-23 12 views
1

我々のモデルでは、java.time.OffsetDateTime(JAVA8)型のDateフィールドがあります。私たちはデータベースとしてMicrosoft SQL Serverを使用しています。データベースのテーブル列は、datetimeoffset型です。アプリケーションでORMとしてHibernateを使用しています。しかし、Hibernateを使用して、java.time.OffsetDateTimeフィールドをSQL Serverのdatetimeoffsetカラムに格納することはできません。MS SQLServerへのjava.time.OffsetDateTimeフィールドHibernateを使用したdatetimeoffsetカラム

これをどのように達成することができますか教えてください。

答えて

0

以下のコンバータクラスを追加すると私にとっては効果的でした。 2番目のフォーマッタは古いSQL Serverデータベースや古いデータを使用している可能性があります。わからないので、必要ありません。

@Converter(autoApply = true) 
public class OffsetDateTimeConverter implements AttributeConverter<OffsetDateTime, String> { 

    private static DateTimeFormatter MAIN_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.nnnnnnnnn xxx"); 
    private static DateTimeFormatter SECONDARY_FROM_DB_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.nnnnnnn xxx"); 

    @Override 
    public String convertToDatabaseColumn(OffsetDateTime attribute) { 
     if (attribute == null) { 
      return null; 
     } 
     return attribute.format(MAIN_FORMATTER); 
    } 

    @Override 
    public OffsetDateTime convertToEntityAttribute(String dbData) { 
     if (dbData == null) { 
      return null; 
     } 

     try { 
      return OffsetDateTime.parse(dbData, MAIN_FORMATTER); 
     } catch (DateTimeParseException e) { 
      // Some old? data has only 7 digits for nanoseconds 
      return OffsetDateTime.parse(dbData, SECONDARY_FROM_DB_FORMATTER); 
     } 
    } 
} 
関連する問題