는이 이것이 가능하지 않은 것 같습니다, 일부 인터넷 검색을 수행 가졌어요. 그러나 나는 Hibernate JIRA 페이지에서 this issue regarding the limitation을 발견했다.
SQLProjection
문자열에 루트가 아닌 별칭을 사용할 수있는 패치를 누군가 RestrictionsExt
클래스를 통해 제출했습니다. 내가 열 별칭 유형의 지정을 허용하는 정적 RestrictionsExt.sqlProjection
방법을 수정했다
RestrictionsExt.sqlProjection("MIN({i}.powerRestarts) as value", "value", new LongType())
("value"
: 질문에서 내 예를 사용하여 다음과 같이
Projections.sqlProjection("MIN(i.powerRestarts) as value", new String[]{"value"}, new Type[]{new LongType()}))
별명 i
이제 참조 할 수 있습니다) (여기서는 LongType
으로 정의 됨) 패치는 이것을 허용하지 않으므로 기본값은 StringType
입니다.
패치의 SQLAliasedProjection 클래스는 org.hibernate.loader.criteria.CriteriaQueryTranslator
: getOuterQueryTranslator
및 getAliasedCriteria
의 개인 메서드에 액세스해야합니다.
cri = ((org.hibernate.loader.criteria.CriteriaQueryTranslator) criteriaQuery).getAliasedCriteria(alias);
이 변경되었습니다 :
Method m = ((org.hibernate.loader.criteria.CriteriaQueryTranslator) criteriaQuery).getClass().getDeclaredMethod("getAliasedCriteria", String.class);
m.setAccessible(true);
cri = (Criteria) m.invoke(((org.hibernate.loader.criteria.CriteriaQueryTranslator) criteriaQuery), alias);
는 희망이 같은 문제에 직면 다른 사람을 도움이 될 것입니다이 최대 절전 모드 소스를 수정하지 않고 작동하도록하기 위해, 나는 반사를 사용했다.