2017-09-04 28 views
1

私はここ数ヶ月のうちにSpring Data JPAとMYSQLを扱ってきました。そこに私は日付のフィールドを格納するためにJava 8のLocalDateTimeを使用しており、JPAは自動的にこれらのフィールドをmysql tinyblobカラムにマップします。Spring Data JPA with Java 8 LocalDateTime

最近私は、スクリプトを使ってシステムにデータを追加する必要がありました。日付時間の列を埋めるために、私はMYSQL TIMESTAMP変数を作成し、tinyblob列に挿入しました。しかし、システムはSerializationExceptionを訴え始め、その原因はこの変換されたdatetime列です。 はその後、私はそれはあなたがアプリケーションを介して挿入すると、それがJavaのシリアライズのいくつかの種類として挿入のようになりますenter image description here

select CAST(drop_off_time AS CHAR(10000) CHARACTER SET utf8) From job 

以下のようにアプリケーションを介して挿入された日付時刻の列を見ていました。しかし、mysqlスクリプトを使って、その機能を複製することはできません。

今私は2つの選択肢があります。 1)アプリケーションに似たDate timeカラムを生成するためのmysqlスクリプトを書く方法を見つける必要があります。 2)私は、mysqlのスクリプトが

あなたの助けに感謝

おかげで、 Keth

EDIT

をサポートすることができ、別のデータ型にTINYBLOBから春データJPAマッピングを変更する必要があります下記の回答とコメントに続いて、簡単な解決策を見つけることができました

Hibe rnate 5.0+、あなたが

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-java8</artifactId> 
    <version>${hibernate.version}</version> 
</dependency> 

にドロップすることができますが、システムはoficially(おそらくJPA短時間でsuppoortedされていないJPA 2.1のLocalDateTimeによると

+1

ポータブルおよびサポートされている「早期リリース」として5サポートを休止8日時APIはサポートされておらず、タイムスタンプの代わりにバイナリとして保存されます。 –

+5

LocalDateTimeはブロブに格納しないでください。そのため、日付で照会することが不可能になり、Java以外の値で値を使用することが不可能になり、必要以上のディスク容量が必要になります。最近のバージョンのHibernateは、日付/タイムスタンプ(http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#basic-providedを参照)として保存され、そのままの状態でLocalDateTimeをサポートします。どのバージョンのスプリング/ハイバネーションを使用していますか? –

+3

このdepyendencyをチェックすると、hibernateにjava8 datetime apiサポートが追加されます:http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.hibernate%22%20AND%20a%3A%22hibernate- java8%22 私が知っている限り、Hibernate 5で利用できるのは –

答えて

3

DATETIMEカラムMySQLへのJava 8のLocalDateTimeのprpertiesのマッピングを開始します2.、2は公式になります)。 JPA 2.0は、すべてのJPAプロバイダに非常にうまく機能(および休止状態5に悪い何も行いません)、javax.persistence.AttributeConverterであるため、JavaのHibernateのバージョンかに応じ

@Converter(autoApply = true) 
public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> { 

@Override 
public Date convertToDatabaseColumn(LocalDate locDate) { 
    return (locDate == null ? null : Date.valueOf(locDate)); 
} 

@Override 
public LocalDate convertToEntityAttribute(Date sqlDate) { 
    return (sqlDate == null ? null : sqlDate.toLocalDate()); 
} 
} 
関連する問題