2016-09-09 3 views
1

まあ、私のことはばかな質問です。JSR-310年はMySQLのTINYBLOBにマップされています

私のYearの列は、直感的なint列の代わりにtinyblobにマップされています(Hibernate 5.1(5.2も同じ))。他のJSR-310列は正常にマップされます。

など。

@Column(name = "ANNO_PROTOCOLLO", nullable = true) 
protected Year annoProtocollo; 

@Column(name = "CREATED", nullable = false, updatable = false, insertable = true) 
protected LocalDateTime created = LocalDateTime.now(); 

最初の列はtinyblobにマッピングされるが、第2は、そのような値のためにSQL標準であるdatetimeにマッピング正しくあります。

再び

、何がintとしてその年の列を宣言するために私を妨げないので、私の質問は愚かですが、私は、この背後にある理由を理解したいとマッピングするためのコードの3未満のラインを取る方法があるかどう年をintにする。私は複数のデータベースで作業する必要があるので、私は@Column(columnDefinition)を受け入れることができない、それが唯一の解決策である場合、私はちょうど整数を使用すると、私は

+1

JDBCは、「LocalDate」、「LocalDateTime」、「LocalTime」、「OffsetDateTime」および「OffsetTime」のデータ型マッピングを定義します。型Yearはそのような型ではありません(SQL標準には同等の型はありません)。 –

+0

ありがとう@MarkRotteveel、あなたのコメントは明らかに状況を指摘します。今、推測の観点から、あなたは**個人的に** intは正しいマッピングであることに同意するでしょうか?議論の目的のために、私は自分の列を整数に変更しようとしています。 –

+0

@MarkRotteveel Java 9でですか? JDBC 4.2(Java 8)は新しい 'java.time'クラスのマッピングを定義していないので、私は見つけることができます。 – Andreas

答えて

2

シンプル理由は、彼らが提供していないということである前に行ったように、それと一緒に暮らしますYearのための特定のマッピングです。したがって、オブジェクト直列化のデフォルトマッピングをバイト(つまりBLOB)に/から取得しています。

カスタムタイプを実装してマッピングを提供できます。
Hibernate Domain Model Mapping Guide - Custom BasicTypesを参照してください。

関連する問題