2017-05-08 6 views
0

私は、Restfulサービスを作成するためのSpringブートv1.5.3.RELEASEとMYSQLをバックエンドとして使用しています。SpringブートでUUIDが動作しないように主キーを使用してレコードを更新する

私はTransactionTblテーブルを持っていて、そのテーブルにレコードがたくさんあると思うので、プライマリキーをuuidタイプにしたかったのです。エンティティで

主キー定義:

@Id 
@GenericGenerator(name = "uuid",strategy = "org.hibernate.id.UUIDGenerator", 
    parameters={ @Parameter (name = "uuid_gen_strategy_class", 
    value = "org.hibernate.id.uuid.CustomVersionOneStrategy") }) 
@GeneratedValue(generator = "uuid") 
@Column(name="txn_id") 
private UUID txnId; 

コードを更新するには:

txnObj = txnService.findOne(txnObj.getTxnId()); 
txnObj.setAmt(someUpdatedAmountValue); 
txnService.save(txnObj); 

上記のコードブロックは、それがスローに実行org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1エラー

私は主に切り替えてみましたキーはUUIDからLong@Id @GeneratedValue(strategy = GenerationType.AUTO)と期待どおりに動作しています。

UUIDの生成を使用すると、UUIDを間違った方法で定義したり、このような更新を行うことはできませんか?

+0

バインド変数の値を含めて実行されたSQL文をログアウトし、あなたが何を見つけるか。 –

+0

@ JensSchauder私は解決策を得ました。私は '@ GenericGenerator'から' parameters'引数を削除し、mysqlの主キーを 'varchar(255)'にした '@Type(type =" uuid-char ")'アノテーションを追加しました。 255)。しかし、私はまだ実際に問題を取り除いたものをテストしなければなりません。 'parameters'引数を削除するか、' @Type(type = "uuid-char") 'またはその両方を追加しました! –

答えて

1
**@Type(type = "uuid-char")** 
@Column(name="txn_id") 
private UUID txnId; 

通常のUUID生成では、データベースにBinary型の列が作成されます。 上記のようにタイプを指定すると、UUIDを生成する際に問題が解決します。カラムタイプをVarcharに変更する After adding the Type Annotation

+0

はい私はすでにコメントに言及しましたが、答えとして追加するのを忘れました。とにかくそれは正解ですので、私はそれを受け入れる:)。 –

関連する問題