有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

内存中存在Hibernate和H2的java软删除问题

我决定尝试this article中描述的软删除机制。 我的域模型中有一个AbstractEntity,其指标已删除:

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

你能帮我解决这个问题吗

更新: 正在使用简单的Spring数据JpaRepository,并且在这个特定的测试中调用了“dette”方法

最后更新: 哦,我刚刚意识到我忘了在查询中添加“version”。有

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

在my AbstractEntity中,最终SQLDELETE如下所示:

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

共 (1) 个答案

  1. # 1 楼答案

    这样更改SQL

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