2017-03-13 11 views
1

this articleで説明したソフト削除メカニズムを試してみることにしました。 削除されたインジケータと私のドメインモデルでAbstractEntityあり:メモリ内のHibernateとH2のソフト削除の問題

@MappedSuperclass 
abstract class AbstractEntity { 
@Column(name = "deleted_ind", nullable = false) 
Boolean deleted = Boolean.FALSE 
} 

は、ジョブの実体がある:

@Entity 
@Table(name = "job") 
@SQLDelete(sql = "UPDATE job SET deleted_ind = true WHERE job_id = ?") 
@Loader(namedQuery = "findJobById") 
@NamedQuery(name = "findJobById", query = 
    "SELECT j FROM Job j WHERE j.id = ? AND j.deleted = false") 
@Where(clause = "deleted_ind = false") 
class Job extends AbstractEntity { 
@Id 
@Column(name = "job_id", nullable = false) 
String id 
} 

しかし、私は、メモリ内のH2を使用して、私の統合テストを実行しようとしています例外が発生します:

Hibernate: UPDATE job SET deleted_ind = true WHERE job_id = ? 
2017-03-13 10:24:13,719 [main] INFO o.h.e.j.b.i.AbstractBatchImpl - HHH000010: On release of batch it still contained JDBC statements 
2017-03-13 10:24:13,720 [main] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 90008, SQLState: 90008 
2017-03-13 10:24:13,720 [main] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Invalid value "2" for parameter "parameterIndex" [90008-192] 
Caused by: org.hibernate.exception.GenericJDBCException: could not delete: [com.tolledo.myapp.Job#a] 
Caused by: org.h2.jdbc.JdbcSQLException: Invalid value "2" for parameter "parameterIndex" [90008-192] 

この問題を解決してもらえますか?

更新日: Simple SpringデータJpaRepositoryが使用されており、この特定のテストではdeteteメソッドが呼び出されています。

最終更新日: 私はちょうど質問に「バージョン」を追加するのを忘れていたことに気付きました。そこに私AbstractEntityで

@Version 
@Column(name = "version", nullable = false) 
Integer version 

があるので、最終的SQLDELETEは次のようになります。

@SQLDelete(sql = "UPDATE job SET deleted_ind = true WHERE job_id = ? and version = ?") 
+0

は、このエラーに行わ –

+0

@MaciejKowalskiを起こしtransactinoalメソッドを追加します。私は、SQLDeleteプリペアドステートメントでいくつかの問題があると思うが、正確に何かを把握することはできません – Tolledo

答えて

0

変更SQLこのよう

@SQLDelete(sql = "UPDATE job SET deleted_ind = 1 WHERE job_id = ?") 

@Where(clause = "deleted_ind = 0") 
+0

同じ例外。 – Tolledo

関連する問題