2010-11-19 6 views
3

내 오래된 최대 절전 모드 전용 코드는 우리가 최대 절전 모드의 EntityManager합니다 (JPA 구현)를 사용하여 새 프로젝트에서JPA에 Hibernate SQLQuery.addScalar()와 동일한 기능이 있습니까?

session.createSQLQuery("SELECT * FROM CATS") 
.addScalar("ID", Hibernate.LONG) 
.addScalar("NAME", Hibernate.STRING) 
.addScalar("BIRTHDATE", Hibernate.DATE) 

같은 것을 사용합니다.

addScalar() 호출과 동일한 항목이 있습니까? 이전과 마찬가지로 반환 된 열의 유형을 지정해야합니까?

예를 들어 addScalar를 사용하지 않으면 SQL 쿼리 결과가 캐시됩니까?

답변

1

JPA에서 정확히 동일한 것을 찾고 있었지만 찾을 수 없습니다. ,

진드기 당신은 SQLQuery에 직접 캐스팅 할 수 없다는 것입니다 :

와우, 6 개월이 도움이 아닌지

이 몰라 :) 대답하지하고 있지만 해결 방법을 찾았습니다 당신은 HibernateQuery에 캐스트 한 다음 getHibernateQuery를 호출하고 그 결과를 SQLQuery로 캐스팅해야한다.

val sql = "select distinct story as story from ..."; 
val q: Query = getEntityManager().createNativeQuery(sql); 
//hello nasty hack 
q.asInstanceOf[HibernateQuery].getHibernateQuery().asInstanceOf[SQLQuery].addScalar("story", StandardBasicTypes.LONG); 
//next, caching 
q.setHint("org.hibernate.cacheable", true); 
q.setHint("org.hibernate.cacheRegion", "query.getTopLinks"); 

추한하지만 그 일 :

+0

어떤 생각을 변경할 수 있습니다 비 절전 jpa 공급자와 함께이 작업을 수행합니까? – vikingsteve

2

포스트 Hibernate native query - char(3) column

가 나타납니다 유사한 짧은 솔루션을 제공하는 것을 수행합니다 일부 (스칼라) 코드에 대한 지금

그리고

나를 위해 일하는 것 :

Query q2 = em.createNativeQuery("select sc_cur_code, sc_amount from sector_costs"); 
q2.unwrap(SQLQuery.class).addScalar("sc_cur_code", StringType.INSTANCE); 
+0

비 - 최대 절전 jpa 공급자와 함께이 작업을 수행하는 방법을 알고 싶습니까? – vikingsteve

1

나는 꽤 오래된 질문을 알고있다. j 경우 다른 사람에 응답 UST는

createNativeQuery는 결과가 얻어 클래스의 유형을 지정하는 매개 변수를 사용하는 문제에 직면 방법, 귀하의 경우 그래서, 당신은에

val sql = "select distinct story as story from ..."; 
Query = getEntityManager().createNativeQuery(sql,Story.class); 
+0

이것은 좋을 수도 있지만 프리미티브/스칼라 (예 : Short.class)에서 작동하지 않는 것 같습니다. 이유는 무엇입니까? (알 수없는 엔터티 : java.lang.Short) – JRun

+0

프리미티브를 DTO 클래스에 넣습니다. – wildloop

관련 문제