2011-04-28 8 views
6

मैं typesafe एपीआई मानदंड का उपयोग कर इस क्वेरी के निर्माण के लिए कोशिश कर रहा हूँ लेता है:जेपीए मानदंड एपीआई। एसक्यूएल समारोह कॉल के साथ क्वेरी जो मानकों

Caused by: org.hibernate.QueryException: could not resolve property: 
latitudegeneratedAlias0 of: domain.XXX 
[select generatedAlias0 from domain.XXX as generatedAlias0 where 
CALC_DISTANCE(generatedAlias0.latitudegeneratedAlias0.longitude:param0:param1)>:param2] 

तरह जेपीए क्वेरी निर्माण तर्क करना भूल जाता है लगता है:

select * from xxx_table xxx where CALC_DISTANCE(xxx.latitude, xxx.longitude, :lat, :lng) < :dist 

CALC_DISTANCE definded PL/SQL function: 
FUNCTION calc_distance( 
pLat1 NUMBER, 
pLon1 NUMBER, 
pLat2 NUMBER, 
pLon2 NUMBER) 
RETURN NUMBER 


CriteriaBuilder builder = JpaHandle.get().getCriteriaBuilder(); 
CriteriaQuery<XXX> criteria = builder.createQuery(XXX.class); 
Root<XXX> xxxRoot = criteria.from(XXX.class); 

ParameterExpression<Double> latParam = builder.parameter(Double.class); 
ParameterExpression<Double> lngParam = builder.parameter(Double.class); 
ParameterExpression<Double> distParam = builder.parameter(Double.class); 

Expression<Double> distFunction = builder.function("CALC_DISTANCE", Double.class, xxxRoot.get(XXX_.latitude), xxxRoot.get(XXX_.longitude), latParam, lngParam); 

criteria.where(builder.greaterThan(distFunction, distParam)); 
TypedQuery<XXX> q = em.createQuery(criteria); 
q.setParameter(latParam, latitude); 
q.setParameter(lngParam, longitude); 
q.setParameter(distParam, new Double(distance.toString())); 
return q.getResultList(); 

मैं इस अपवाद अल्पविरामों के साथ अलग पैरा, या क्या मुझे ऐसा करने का कोई तरीका है?

+0

हिब बग की तरह दिखता है ... O_O –

उत्तर

0

ऐसा लगता है कि आपके परिभाषित पीएल/एसक्यूएल फ़ंक्शन में 4 तर्क होते हैं और आपके पास केवल 2 तर्क दिखाए जाते हैं।

संबंधित मुद्दे