私は、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を間違った方法で定義したり、このような更新を行うことはできませんか?
バインド変数の値を含めて実行されたSQL文をログアウトし、あなたが何を見つけるか。 –
@ JensSchauder私は解決策を得ました。私は '@ GenericGenerator'から' parameters'引数を削除し、mysqlの主キーを 'varchar(255)'にした '@Type(type =" uuid-char ")'アノテーションを追加しました。 255)。しかし、私はまだ実際に問題を取り除いたものをテストしなければなりません。 'parameters'引数を削除するか、' @Type(type = "uuid-char") 'またはその両方を追加しました! –