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 = ?")
die transactinoal Methode hinzufügen, dass dieser Fehler gemacht –
@MaciejKowalski verursacht. Ich denke, es gibt ein Problem mit SQLDelete vorbereitete Anweisung, aber kann nicht herausfinden, was genau – Tolledo