Bazı googling yaptıktan sonra, bunun mümkün olmadığı anlaşılıyor - Hazırda bekletme, yalnızca {alias}
kullanarak SQLProjection
numaralı SQL dizesinde kök varlık takma adının eklenmesine izin verir. Ancak, Hibernate JIRA sayfalarında this issue regarding the limitation'u buldum.
Birisi, RestrictionsExt
sınıfında yeni bir RestrictionsExt
sınıfı aracılığıyla SQLProjection
dizesinde kök olmayan takma adların kullanılmasına izin veren bir düzeltme eki gönderdi. Ben sütun takma adı için tip belirlenmesine izin vermek için statik RestrictionsExt.sqlProjection
yöntemini değiştirmek zorunda
RestrictionsExt.sqlProjection("MIN({i}.powerRestarts) as value", "value", new LongType())
("value"
: Söz benim örneği kullanarak: olarak
Projections.sqlProjection("MIN(i.powerRestarts) as value", new String[]{"value"}, new Type[]{new LongType()}))
takma i
şimdi başvurulabilir yama buna izin ve StringType
varsayılan ayarı vermedi gibi) (burada) LongType
olarak tanımlanır.
Düzeltme ekindeki SQLAliasedProjection sınıfı ayrıca aşağıdaki özel yöntemlere org.hibernate.loader.criteria.CriteriaQueryTranslator
: getOuterQueryTranslator
ve getAliasedCriteria
numaralı telefonlardan erişilmesini gerektirir.
cri = ((org.hibernate.loader.criteria.CriteriaQueryTranslator) criteriaQuery).getAliasedCriteria(alias);
değiştirildi:
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);
Umarım bu aynı sorunla karşı karşıya başkasının yardımcı olacak bu hazırda kaynağını değiştirmeden çalışmasını sağlamak için, ben yansıma kullandı.