Criteria API를 기반으로하는 일반 findAll 쿼리가 잘못된 SQL을 생성 함

Ch4t4r

최근에 더 큰 프로젝트를 조정했습니다. 내가 한 첫 번째 일은 3 년 된 종속성을 업데이트하는 것입니다 (Hibernate가 4.1.4에서 5.2.10, Java 7에서 8, tomee 1.7.4에서 7.0.3).
그러나 내가 Hibernate에 정확히 익숙하지 않기 때문에 수많은 문제에 부딪 혔기 때문에 업그레이드는 도전이었습니다. 지금까지 대부분의 문제를 해결할 수 있었지만 현재의 문제로 머리를 감을 수는 없습니다. 테이블에서 모든 엔티티를 가져 오는 기존의 일반 함수가 있습니다.
기준에 따라 쿼리가 생성되지만 원시 SQL 쿼리가 잘못된 것 같아서 데이터가 반환되지 않습니다. 더 정확합니다. 테이블 및 열 이름이 그 안에서 바뀌지 않습니다. 아래 코드에서 찾을 수있는 디버그 인쇄 결과는 다음과 같습니다.

select generatedAlias0 from TestReferenceEntity as generatedAlias0



실재:

@Entity
@Table(name = "TEST_TYPE_REF")
@NamedQueries({@NamedQuery(name = "findTestEntityByName", query = "SELECT bt FROM TestReferenceEntity bt WHERE bt.name = :name") })
public class TestReferenceEntity extends AbstractEntity {
    public static final String FIND_BY_NAME = "findTestEntityByName";
    public static final String TYPENAME_PARAM_NAME = "name";

    @NotNull
    @Size(max = 50)
    @Column(name = "NAME")
    private String name;

    @Size(max = 50)
    @Column(name = "PREFIX")
    private String prefix;

    @Size(max = 100)
    @Column(name = "IDENT_REGEXP")
    private String regexp;
}

AbstractDao :

public abstract class AbstractDao<E extends AbstractEntity> implements AbstractService<E>  {
    public static final String PERSISTENCE_UNIT = "MeineJpaPU";

    private static Logger LOG = Logger.getLogger(AbstractDao.class);

    @PersistenceContext(unitName = PERSISTENCE_UNIT)
    private EntityManager em;

    @Inject
    private UserService userService;

    private E entityClass; //This is set elsewhere

    public List<E> findAll() {
        return findAll(1, 1000);
    }

    public List<E> findAll(final int page, final int rowsPerPage) {
        final Class<E> clazz = getEntityClass(); //TestReferenceEntity.class
        final CriteriaBuilder cb = em.getCriteriaBuilder();
        final CriteriaQuery<E> criteria = cb.createQuery(clazz);
        final Root<E> r = criteria.from(clazz);
        criteria.select(r);

        final TypedQuery<E> query = getEntityManager().createQuery(criteria);
        query.setFirstResult(page - 1);
        query.setMaxResults((page - 1) * rowsPerPage);
        System.out.println(">>>>>>>>>>>> " + query.unwrap(org.hibernate.Query.class).getQueryString());

        return query.getResultList(); //Empty - but there is data in the table
    }
}

persistence.xml :

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                        http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="MeineJpaPU" transaction-type="JTA">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>java:openejb/Resource/jdbc/PROJECTNAME</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>
    </persistence-unit>
</persistence>

내 가장 좋은 추측은 최신 버전의 최대 절전 모드에 추가 된 일부 핵심 부분 (주석?)이 누락 된 것입니다. 결국 우리가 사용한 버전은 조금 더 오래되었습니다. 이 동작을 조사했지만 내 문제와 일치하는 것을 찾을 수 없습니다. Hibernate의 마이그레이션 가이드도 도움이되지 않았습니다.


나는 당신이 나를 해결책으로 인도 할 수 있기를 바랍니다. 미리 감사드립니다,
Daniel

Dexmo

findAll() (매개 변수 없음)은 페이지에 대해 1을 전달합니다.

query.setMaxResults((page - 1) * rowsPerPage);

결과는 query.setMaxResults(0).

이전에 잘 작동한다고 말했듯이 Hibernate 구현이 변경된 것 같습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Hibernate는 잘못된 결과 집합을 반환하고 잘못된 쿼리를 생성합니다.

분류에서Dev

Eloquent ORM 5.1 쿼리가 잘못된 결과를 반환 함 (일반 SQL과 비교)

분류에서Dev

SQL HierarchyId가 때때로 잘못된 경로를 생성 함

분류에서Dev

집계 함수가있는 SQL 쿼리가 더 큰 쿼리를 실행할 때 잘못된 값을 반환하는 이유는 무엇입니까?

분류에서Dev

SQL : 중첩 된 하위 쿼리가 항목을 잘못 반환 함

분류에서Dev

Elastic Search 일치 쿼리가 잘못된 결과 및 점수를 반환 함

분류에서Dev

체크 박스에 포함 된 정보를 기반으로 nodeJS에서 get 쿼리를 생성하는 방법

분류에서Dev

여러 내부 조인이있는 SQL 쿼리가 잘못된 값 개수를 반환 함

분류에서Dev

strncpy 함수가 잘못된 파일 이름을 생성 함

분류에서Dev

SQL 쿼리가 잘못된 결과를 반환합니다.

분류에서Dev

필드 배열에 대해 사용 된 elasticsearch 일치 쿼리가 잘못된 결과를 반환 함

분류에서Dev

레일이 잘못된 '쇼'경로를 생성 함

분류에서Dev

잘못된 결과를 반환하는 SQL BETWEEN 쿼리

분류에서Dev

파일의 행을 반복하면 잘못된 행 수가 생성됩니다.

분류에서Dev

Codeigniter의 쿼리 빌더는 올바른 SQL 문을 생성하지만 쿼리를 실행하면 잘못된 결과가 발생합니다.

분류에서Dev

mkpasswd -m sha-512가 잘못된 로그인을 생성 함

분류에서Dev

반복을 기반으로 결함을 가져 오는 rally_api 쿼리

분류에서Dev

잘못된 경로를 가정하는 Nlog를 기반으로 TypeInitializationException을 수정하는 방법

분류에서Dev

Matlab을 사용하여 밀도 함수를 기반으로 단계가 동일하지 않은 메시 생성

분류에서Dev

일괄 중첩 for 루프가 잘못된 값을 반환 함

분류에서Dev

부서를 가져 오기 위해 잘못된 결과를 반환하는 SQL 쿼리

분류에서Dev

스키마가 "공용"과 다를 때 잘못된 1.SQL 파일을 생성하는 진화

분류에서Dev

json.org xml 생성기가 잘못된 배열 출력을 생성 함

분류에서Dev

CSV 파일을 사용하는 AD 사용자의 Ceate 폴더가 잘못된 폴더 이름을 생성 함

분류에서Dev

bool이 포함 된 탄력적 검색 필터 쿼리가 잘못된 결과를 반환 함

분류에서Dev

bool이 포함 된 탄력적 검색 필터 쿼리가 잘못된 결과를 반환 함

분류에서Dev

반응 : 잘못된 경로를 포함하는 POST API 호출

분류에서Dev

매개 변수 선택을 기반으로 보고서를 생성하는 SQL 쿼리

분류에서Dev

Django 필터 has_key가 잘못된 SQL을 생성 함

Related 관련 기사

  1. 1

    Hibernate는 잘못된 결과 집합을 반환하고 잘못된 쿼리를 생성합니다.

  2. 2

    Eloquent ORM 5.1 쿼리가 잘못된 결과를 반환 함 (일반 SQL과 비교)

  3. 3

    SQL HierarchyId가 때때로 잘못된 경로를 생성 함

  4. 4

    집계 함수가있는 SQL 쿼리가 더 큰 쿼리를 실행할 때 잘못된 값을 반환하는 이유는 무엇입니까?

  5. 5

    SQL : 중첩 된 하위 쿼리가 항목을 잘못 반환 함

  6. 6

    Elastic Search 일치 쿼리가 잘못된 결과 및 점수를 반환 함

  7. 7

    체크 박스에 포함 된 정보를 기반으로 nodeJS에서 get 쿼리를 생성하는 방법

  8. 8

    여러 내부 조인이있는 SQL 쿼리가 잘못된 값 개수를 반환 함

  9. 9

    strncpy 함수가 잘못된 파일 이름을 생성 함

  10. 10

    SQL 쿼리가 잘못된 결과를 반환합니다.

  11. 11

    필드 배열에 대해 사용 된 elasticsearch 일치 쿼리가 잘못된 결과를 반환 함

  12. 12

    레일이 잘못된 '쇼'경로를 생성 함

  13. 13

    잘못된 결과를 반환하는 SQL BETWEEN 쿼리

  14. 14

    파일의 행을 반복하면 잘못된 행 수가 생성됩니다.

  15. 15

    Codeigniter의 쿼리 빌더는 올바른 SQL 문을 생성하지만 쿼리를 실행하면 잘못된 결과가 발생합니다.

  16. 16

    mkpasswd -m sha-512가 잘못된 로그인을 생성 함

  17. 17

    반복을 기반으로 결함을 가져 오는 rally_api 쿼리

  18. 18

    잘못된 경로를 가정하는 Nlog를 기반으로 TypeInitializationException을 수정하는 방법

  19. 19

    Matlab을 사용하여 밀도 함수를 기반으로 단계가 동일하지 않은 메시 생성

  20. 20

    일괄 중첩 for 루프가 잘못된 값을 반환 함

  21. 21

    부서를 가져 오기 위해 잘못된 결과를 반환하는 SQL 쿼리

  22. 22

    스키마가 "공용"과 다를 때 잘못된 1.SQL 파일을 생성하는 진화

  23. 23

    json.org xml 생성기가 잘못된 배열 출력을 생성 함

  24. 24

    CSV 파일을 사용하는 AD 사용자의 Ceate 폴더가 잘못된 폴더 이름을 생성 함

  25. 25

    bool이 포함 된 탄력적 검색 필터 쿼리가 잘못된 결과를 반환 함

  26. 26

    bool이 포함 된 탄력적 검색 필터 쿼리가 잘못된 결과를 반환 함

  27. 27

    반응 : 잘못된 경로를 포함하는 POST API 호출

  28. 28

    매개 변수 선택을 기반으로 보고서를 생성하는 SQL 쿼리

  29. 29

    Django 필터 has_key가 잘못된 SQL을 생성 함

뜨겁다태그

보관