Пагинация JPA / Hibernate - неверный запрос COUNT для @Inheritance (strategy = InheritanceType.JOINED) с @Where - PullRequest
1 голос
/ 10 июля 2020

Кто-нибудь может мне помочь? Я пытаюсь использовать JPA с данными Spring с мягким удалением, используя предложение where в унаследованном классе. Однако кажется, что не учитывается наследование, когда класс Pageable генерирует свой запрос для подсчета количества строк.

Класс ClassA (базовый класс): <- здесь удаленный столбец </p>

@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 class (Inherited class):

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

По запросу, вот простой пример:

Ответы [ 2 ]

1 голос
/ 27 июля 2020

Это проблема с Hibernate.

Вы можете попробовать старую версию гибернации 5.4.4.Final прямо сейчас или дождаться выхода 5.4.19 . Обратите внимание на следующие элементы, чтобы узнать дату выпуска:

0 голосов
/ 10 июля 2020

Вы не можете наследовать аннотации, следовательно, их необходимо дублировать в каждом подклассе. Добавьте эти аннотации в сущность формы и попробуйте. А также убедитесь, что вы определили столбец удаления в сущности формы.

...