首页 > 解决方案 > JPA/Hibernate 分页 - 使用 @Where 对 @Inheritance(strategy = InheritanceType.JOINED) 的错误 COUNT 查询

问题描述

有人可以帮帮我吗?我正在尝试使用继承类中的 where 子句将 spring 数据 JPA 与软删除一起使用。但是,当 Pageable 类生成其查询以计算行数时,似乎没有考虑继承。

ClassA 类(基类):<- 删除的列在这里

@Entity 
@Table(name = "SYS_ELEMENT") 
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING, length = 63) @DiscriminatorValue("Element") 
@SQLDelete(sql = "UPDATE SYS_ELEMENT SET DELETED = 1, DELETED_ID = ID, DELETED_VERSION = VERSION WHERE ID = ? AND VERSION = ? ", check = ResultCheckStyle.COUNT) 
@Where(clause="DELETED = 0" ) 
public class Element extends EntityBase  { 
}

ClassB 类(继承类):

@Entity
@Table(name = "SYS_FORM")
@DiscriminatorValue("Form")
public class Form extends Element {
}

我加载以下代码:

 Pageable pageable = PageRequest.of(0, 10);
 Page page = service.findByAll(pageable);

这是我的例外:

Hibernate: 
    /* select
        count(generatedAlias0) 
    from
        Form as generatedAlias0 */ select
            count(form0_.id) as col_0_0_ 
        from
            sys_form form0_ 
        where
            (
                form0_1_.DELETED = 0
            )
2020-07-09 21:23:10.123  WARN 22464 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 4104, SQLState: S0001
2020-07-09 21:23:10.123 ERROR 22464 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper   : The multi-part identifier "form0_1_.DELETED" could not be bound.
could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
org.hibernate.exception.SQLGrammarException: could not extract ResultSet
[Ljava.lang.StackTraceElement;@748df19a

如果我删除 where 子句,它会起作用。我不确定这是弹簧数据 JPA 还是 JPA 问题。

根据要求,这是一个简单的示例:

标签: javahibernatejpaspring-data-jpa

解决方案


这是 Hibernate 的一个问题。

您现在可以尝试旧的休眠版本5.4.4.Final或等到5.4.19发布。请注意以下项目的发布日期。


推荐阅读