2016-10-26 23 views
0

sqlの "データが切り捨てられました"という質問はスタックオーバーフローで非常に多いことがわかりました。しかし、私の質問は少し異なり、私はその答えを見つけることができません。Hibernate:主キー列でデータが切り捨てられました

私は更新ステートメントを実行しているときに主キーで切り捨てられています。

public void updateListData(String newId, String oldId) { 
     StringBuilder sql = new StringBuilder("UPDATE card_info c "); 
     sql.append("SET c.xxx_id = :newId "); 
     sql.append("WHERE c.xxx_id <> '' AND c.status = 1 AND c.is_private = 1 AND c.delete = 0 AND c.xxx_id = :oldId "); 

     Query query = getEntityManager().createNativeQuery(sql.toString()); 
     query.setParameter("newId", newId); 
     query.setParameter("oldId", oldId); 

     query.executeUpdate(); 

    } 

マイログ:

WARN : org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 1265, SQLState: 01000 
ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - data truncated for primary key column: <card_id> 

私はこのエラーを解決することはできません

My機能は、SQLを更新します。 私を助けてください。 ありがとうございます!

+0

なぜこの部分を使用しますか?「where c.xxx_id <>」「AND」? – Daniyar

+0

私はnullをチェックします。だから多分私はそのためnullではない使用します:) –

+0

すべての更新クエリのこのエラーが表示されますか?エラーコードの説明によると、newIdがnullまたは ''のとき、または番号なしのfloat列を挿入/更新しようとしたときに発生します。 – Daniyar

答えて

0

cardIdを数値にしないように更新しようとしたと思います。そうでないと、あなたの列の種類には大きすぎます。 An Int can only accept values between -2147483648 to 2147483647. 更新クエリを作成する前に、パラメータnewIdの検証を追加することをお勧めします。

+0

card_idタイプint、xxx_idタイプvarchar(7)。私はparam:oldId = '4388421'、newId = '4388420'で更新します。大きなものではありません:( –

+0

xxx_id = 4388421のcard_id列をチェックすることができますか? ''またはnullの場合はエラーの原因になります – Daniyar

関連する問題