String query = "SELECT Vehicle, ( 3959 * acos( cos( radians(37) ) * cos( radians( Vehicle.lat ) ) * cos( radians( Vehicle.lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( Vehicle.lat ) ) ) ) AS distance FROM VehicleDetails Vehicle";
Object[] params = {lat,lng};
List<VehicleDetails> vehicledata = getHibernateTemplate().find(query,params);
两个参数“ lat”和“ lng”。查询中的数字“ 37”是“ lat”值。该值在查询中重复两次。使用“?”分配参数但在这种情况下,第一个“?”将是“ lat”和第二个“?”将为“ lng”,还有另一个第三个数字。如何在查询中两次分配“ lat”参数?
最佳答案
就像这样:
String query = "SELECT Vehicle, ( 3959 * acos( cos( radians(37) ) * cos( radians( ? ) ) * cos( radians( ? ) - radians(-122) ) + sin( radians(37) ) * sin( radians( ? ) ) ) ) AS distance FROM VehicleDetails Vehicle";
Object[] params = {lat,lng, lat};
List<VehicleDetails> vehicledata = getHibernateTemplate().find(query,params);
或使用namedParameters
String query = "SELECT Vehicle, ( 3959 * acos( cos( radians(37) ) * cos( radians( :lat ) ) * cos( radians( :lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( :lat ) ) ) ) AS distance FROM VehicleDetails Vehicle";
List<VehicleDetails> vehicledata = getHibernateTemplate().findByNamedParam(query,{'lat','lng'},{lat, lng});
有限制的版本:
Query q = getHibernateTemplate().getSession().createQuery(query );
q.setFirstResult(0); // modify this to adjust paging
q.setMaxResults(20);
// For named parameters
q.setParamter("lat",lat);
q.setParamter("lng",lng);
// For non named parameters
q.setParamter(0,lat);
q.setParamter(1,lng);
q.setParamter(2,lat);
List<VehicleDetails> vehicledata = q.list();
关于java - Hibernate-getHibernateTemplate在查询中重复参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29815706/