2017-10-31 9 views
0

私はJDBCフレームワークでSpringフレームワークを使用していますが、私もpostgresを使用しています。JDBCテンプレートでUUIDを使用するにはどうすればよいですか?

ポストグルには、UUIDを主キーとして使用するテーブルがあり、その列のタイプはpostgres 'native UUIDsです。これらのUUIDは、JDBCテンプレートを使用して作成されたプリペアドステートメントにどのように格納しますか?

私はそうのような文字列にUUIDを変換しようとしました:私はちょうどそのような生のUUIDを使用している場合

ERROR: column "id" is of type uuid but expression is of type character varying 
    Hint: You will need to rewrite or cast the expression. 

そして:

int rowsAffected = this.jdbc.update(sql, new Object[] { 
    baseMaterial.getId().toString().toLowerCase(), 
    baseMaterial.getName(), 
    baseMaterial.getDescription() 
}); 

が、このエラーが発生していること

int rowsAffected = this.jdbc.update(sql, new Object[] { 
    baseMaterial.getId(), 
    baseMaterial.getName(), 
    baseMaterial.getDescription() 
}); 

、私はこのエラーで終わる:

org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of java.util.UUID. Use setObject() with an explicit Types value to specify the type to use. 

アイデア?これは私を怒らせる。

+0

使用しているPostgreSQL JDBCドライバのバージョンは? –

+0

@MarkRotteveel ' 9.1-901-1.jdbc4' –

+1

42.1.4に更新し、問題が解決するかどうかを確認するため、9.1-901は6歳です。 –

答えて

2

使用しているPostgreSQLのドライバのバージョンは6歳で、多くは以降/改善に変更されました。バージョン42.1.4にアップグレードすることをお勧めします。

私はrelease notesをスキャンしましたが、UUIDのサポートを追加(または改善)した特定のバージョンが見つかりませんでした。

1

はこのようなクエリで型を使用してみてください:

int[] types = {Types.VARCHAR, Types.VARCHAR, Types.VARCHAR}; 

int rowsAffected = this.jdbc.update(sql, new Object[]{ 
    baseMaterial.getId().toString().toLowerCase(), 
    baseMaterial.getName(), 
    baseMaterial.getDescription() 
}, types);//<<-----------specify the type of each attribute 
関連する問題