如何在不创建特定域模型的情况下忽略命名查询中的字段

时间:2015-11-11 06:28:45

标签: java hibernate spring-data named-query

我想选择具有特定字段的对象,但是在现有模型中存储对象。

@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以获取值&#39; {Chevrolet,2009}&#39;嵌套异常是org.springframework.core.convert.ConverterNotFoundException:找不到能够从类型java.lang.Integer转换为类型com.sample.model.Car的转换器

1 个答案:

答案 0 :(得分:0)

您可以使用动态实例化。 像这样的东西

select new Car(c.name, c.year) FROM Car c WHERE c.year = :year

或者你可以使用结果转换器(没有@Query)。 您可以看到this有关部分对象加载的一些想法。

<强>更新

它需要Car(String name, Integer year)中的Car构造函数和默认构造函数。