2017-03-13 2 views
1

Ich habe mich entschieden, Soft-Delete-Mechanismus zu versuchen, der in this article beschrieben wurde. Es gibt eine AbstractEntity in meinem Domain-Modell mit gelöschten Anzeige:Problem beim weichen Löschen mit Hibernate und H2 im Speicher

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

Und es gibt einen Job Einheit:

@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 
} 

Aber wenn ich versuche, meine Integrationstests mit h2 im Speicher ausgeführt werden , Ausnahme tritt auf:

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] 

Könnten Sie bitte mit diesem Problem helfen?

UPDATE: Simple Spring Daten JpaRepository wird verwendet und in diesem speziellen Test wird 'detete' Methode aufgerufen.

ENDGÜLTIGES UPDATE: Oh, ich habe gerade festgestellt, dass ich vergaß, "Version" hinzuzufügen, um abzufragen. Es gibt

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

in meinem AbstractEntity, so endgültig SQLDELETE wie folgt aussieht:

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

die transactinoal Methode hinzufügen, dass dieser Fehler gemacht –

+0

@MaciejKowalski verursacht. Ich denke, es gibt ein Problem mit SQLDelete vorbereitete Anweisung, aber kann nicht herausfinden, was genau – Tolledo

Antwort

0

ändern SQL auf diese Weise

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

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

Die gleiche Ausnahme. – Tolledo

Verwandte Themen