문제

그것은 짧은:최대 절전 모드를 지원하지 않는 예측 및 쿼리에 의해 예?이 게시물:

코드가 이:

User usr = new User();
usr.setCity = 'TEST';
getCurrentSession().createCriteria(User.class)
.setProjection( Projections.distinct( Projections.projectionList()
.add( Projections.property("name"), "name")
.add( Projections.property("city"), "city")))
.add( Example.create(usr))

다음과 같은 다른 포스터는 말했다,생성된 sql 유지하는 데는 클래스를 참조하 y0_=?대신 this_.도시.

이용에 불편을 드려 정말 죄송 여러 가지 방법 및 검색된 문제를 추적기는 아무것도 발견하지 못했습니다.

이 시도를 사용하여 프로젝션 별명을 변압기,하지만 그것은 작동하지 않습니다.

User usr = new User();
usr.setCity = 'TEST';
getCurrentSession().createCriteria(User.class)
.setProjection( Projections.distinct( Projections.projectionList()
.add( Projections.property("name"), "name")
.add( Projections.property("city"), "city")))
.add( Example.create(usr)).setResultTransformer(Transformers.aliasToBean(User.class));

누군가 사용 예측 및 쿼리에 의해 예?

도움이 되었습니까?

해결책

볼 수 있습니다 귀하의 사용자 등?이것은 그냥을 사용하여 아래와 같은 제한이 있습니다.※이런 제한을 것이 정말로 어떤 다른 예에는(제 생각에는 null 필드를 무시 기본적으로 예시하지만).

getCurrentSession().createCriteria(User.class)
.setProjection( Projections.distinct( Projections.projectionList()
.add( Projections.property("name"), "name")
.add( Projections.property("city"), "city")))
.add( Restrictions.eq("city", "TEST")))
.setResultTransformer(Transformers.aliasToBean(User.class))
.list();

용 alaistToBean 지만,저는 그것에 대해 읽어보십시오.할 수 있도 루프를 통해 결과를..

List<Object> rows = criteria.list();
for(Object r: rows){
  Object[] row = (Object[]) r;
  Type t = ((<Type>) row[0]);
}

는 경우에 당신은 당신 수동으로 채우는 사용자가 자신이는 방법입니다.

그것의 종류의 하드로 보면 문제없이 좀 더 많은 정보를 진단하는 문제입니다.

다른 팁

문제는 것 같을 때 일어날 수 있는 별칭과 동일한 이름을 개체를 제공합니다.Hibernate 을 선택하는 것 같다는 별칭에서 사용 sql.이 문서화 , 고,나는 그것이 버그에서 최대 절전 모드지만,나는 확실하지 않는 최대 절전 모드 팀에 동의합니다.

어느 쪽이든,내가 찾은 간단한 작동 주위에서 작동합니다.마일리지 달라질 수 있습니다.자세한 내용은 아래 있습니다,나는 코드를 간소화에 대한 이 샘플 그래서 나는 죄송한 오류나 오타의:

Criteria criteria = session.createCriteria(MyClass.class)
    .setProjection(Projections.projectionList()
        .add(Projections.property("sectionHeader"), "sectionHeader")
        .add(Projections.property("subSectionHeader"), "subSectionHeader")
        .add(Projections.property("sectionNumber"), "sectionNumber"))
    .add(Restrictions.ilike("sectionHeader", sectionHeaderVar)) // <- Problem!
    .setResultTransformer(Transformers.aliasToBean(MyDTO.class));

생산 것이 sql:

select
    this_.SECTION_HEADER as y1_,
    this_.SUB_SECTION_HEADER as y2_,
    this_.SECTION_NUMBER as y3_,
from
    MY_TABLE this_ 
where
    ( lower(y1_) like ? ) 

는 오류를 일으키는: java.sql.SQLException:ORA-00904:"Y1_":잘못된 식별자

하지만,변경했는데 제한"사용"이 이렇게:

Criteria criteria = session.createCriteria(MyClass.class)
    .setProjection(Projections.projectionList()
        .add(Projections.property("sectionHeader"), "sectionHeader")
        .add(Projections.property("subSectionHeader"), "subSectionHeader")
        .add(Projections.property("sectionNumber"), "sectionNumber"))
    .add(Restrictions.ilike("this.sectionHeader", sectionHeaderVar)) // <- Problem Solved!
    .setResultTransformer(Transformers.aliasToBean(MyDTO.class));

그것이 생산되는 다음 sql 고 내 문제를 해결할 수 있었습니다.

select
    this_.SECTION_HEADER as y1_,
    this_.SUB_SECTION_HEADER as y2_,
    this_.SECTION_NUMBER as y3_,
from
    MY_TABLE this_ 
where
    ( lower(this_.SECTION_HEADER) like ? ) 

Thats,it!아주 간단한 해결하는 고통스러운 문제입니다.지 않는 방법을 알고 이를 해결 것을 번역하여 쿼리를 예 문제이지만,그것은 당신을 얻을 수 있습니다.

진짜 문제는 버그가 있 최대 절전 모드는 사용하는 선택 목록 별칭에 어디에서-항목:

http://opensource.atlassian.com/projects/hibernate/browse/HHH-817

의 경우에는 사람 땅을 찾고 여기에 대한 답변을 보면 이동합니다.그것은 5 년이 걸렸을 해결 하지만 이론 그것은 것 중 하나에서 다음 버전 그리고 나는 생각되는 문제 멀리 갈 것입니다.

나면 비슷한 문제가 발생합니다.내가 사용하여 쿼리를 들어 내가 원하는 결과를 정렬하여 사용자 정의 필드입니다.에서 SQL 나는 뭔가를 다음과 같:

select pageNo, abs(pageNo - 434) as diff
from relA
where year = 2009
order by diff

없이 잘 작동하 order-by-clause.내가 무엇을 얻

Criteria crit = getSession().createCriteria(Entity.class);
crit.add(exampleObject);
ProjectionList pl = Projections.projectionList();
pl.add( Projections.property("id") );
pl.add(Projections.sqlProjection("abs(`pageNo`-"+pageNo+") as diff", new String[] {"diff"}, types ));
crit.setProjection(pl);

그러나 때 추가

crit.addOrder(Order.asc("diff"));

org.hibernate.QueryException:를 확인할 수 없습실:diff 예외는 아니다.대 하지 않습니다.

PS:로를 찾을 수 없습은 정교한 문서의 사용에 QBE 최대 절전 모드에 대한 모든 재료는 위 주로 trial-and-error 접근법

ProjectionList pl = Projections.projectionList();
pl.add(Projections.property("id"));
pl.add(Projections.sqlProjection("abs(`pageNo`-" + pageNo + ") as diff", new String[] {"diff"}, types ), diff); ---- solution
crit.addOrder(Order.asc("diff"));
crit.setProjection(pl);

난 정말 그렇게 생각,내가 무엇을 찾을 수 단어입니다"다."원인이 최대 절전 모드를 포함하지 않기에 어떤 제한 쿼리,의미있는 모든 레코드 목록입니다.에 대해 최대 절전 모드는 버그보고,나는 그것을 볼 수 있습의 보고로 고정되지만 나는 완전히 다운로드하지 못했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top