Вероятно, вы переопределили свою функцию «sum» как целочисленный тип данных. Поэтому справедливо сказать вам, что целое число не является чем-то, что вы можете передать диапазону.
Чтобы исправить это, перезапустите свой интерпретатор.
Python 2.7.3 (default, Apr 20 2012, 22:44:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> data1 = range(0, 1000, 3)
>>> data2 = range(0, 1000, 5)
>>> data3 = list(set(data1 + data2)) # makes new list without duplicates
>>> total = sum(data3) # calculate sum of data3 list's elements
>>> print total
233168
Если вы затеняете встроенный sum
, вы можете получить сообщение об ошибке, которое вы видите
>>> sum = 0
>>> total = sum(data3) # calculate sum of data3 list's elements
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
Также обратите внимание, что sum
отлично работает на set
, нет необходимости преобразовывать его в list
@Transactional
@Query(value="SELECT price FROM phone WHERE model = ?1 AND storage = ?2 AND quality = ?3",nativeQuery=true)
public double devicePrice(String model, String storage, String quality);
Поскольку вы собираетесь использовать Spring Boot, вы можете расширить свой репозиторий с помощью JpaRepository<T, ID>
, как показано ниже
public interface PhoneRepository extends JpaRepository<Phone, ID>
Здесь Phone - это ваша сущность, а ID - это тип вашей основной введите вашу сущность. Jpa облегчает написание пользовательского запроса без записи в вашем хранилище.
JpaRepository уже имеет следующие методы
List<T> findAll();
List<T> findAll(Sort sort);
List<T> findAllById(Iterable<ID> ids);
<S extends T> List<S> saveAll(Iterable<S> entities);
<S extends T> S saveAndFlush(S entity);
void deleteAllInBatch();
<S extends T> List<S> findAll(Example<S> example);
Даже вы можете писать свои запросы на основе ссылочных полей.
.findByLastnameAndFirstname (… where x.lastname = ?1 and x.firstname = ?2)
Вам не нужно реализовывать @Repository PhoneRepository. Просто позвоните в PhoneRepository вашего контроллера или службы с помощью @Autowired и используйте devicePrice (модель String, хранилище строк, качество String).
Пример в нашем сервисе:
@Autowired
private PhoneRepository phoneRepository;
public double yourMethod(String model, String storage, String quality) {
return this.phoneRepository.devicePrice(String model, String storage, String quality);
}