Как игнорировать поле в именованном запросе без создания конкретной модели домена
Я хочу выбрать объект с конкретным полем, но сохранить объект в существующей модели.
@Entity
public class Car {
@Id
private Integer id;
private String name;
private String type;
private Integer year;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Integer getYear() {
return year;
}
public void setYear(Integer year) {
this.year = year;
}
}
Мой репозиторий.
public interface CarRepository extends JpaRepository<Car, Integer>{
@Query("SELECT c.name, c.year FROM Car c WHERE c.year = :year")
List<Car> findAll(@Param("year") Integer year);
}
Но это даст мне ошибку:
Не удалось преобразовать тип java.lang.Object[] в тип com.sample.model.Car для значения '{Chevrolet, 2009}'; вложенное исключение - org.springframework.core.convert.ConverterNotFoundException: не найден конвертер, способный преобразовать тип java.lang.Integer в тип com.sample.model.Car.
1 ответ
Решение
Вы можете использовать динамическую реализацию. Что-то вроде этого
select new Car(c.name, c.year) FROM Car c WHERE c.year = :year
или вы можете использовать преобразователь результата (без @Query
). И вы можете увидеть это, если подумать о частичной загрузке объектов.
ОБНОВИТЬ
И это должно иметь Car(String name, Integer year)
конструктор в Car
и конструктор по умолчанию тоже.