如何在不创建特定域模型的情况下忽略命名查询中的字段
How to ignored field in named query without creating specific domain model
我想 select 具有特定字段的对象,但对象存储在现有模型中。
@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);
}
但这会给我错误:
Failed to convert from type java.lang.Object[] to type com.sample.model.Car for value '{Chevrolet, 2009}'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.lang.Integer to type com.sample.model.Car
您可以使用动态实例化。
像这样
select new Car(c.name, c.year) FROM Car c WHERE c.year = :year
或者您可以使用结果转换器(没有 @Query
)。
您可以查看 this 了解有关部分对象加载的一些想法。
更新
并且它需要在 Car
中有 Car(String name, Integer year)
构造函数和默认构造函数。
我想 select 具有特定字段的对象,但对象存储在现有模型中。
@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);
}
但这会给我错误:
Failed to convert from type java.lang.Object[] to type com.sample.model.Car for value '{Chevrolet, 2009}'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.lang.Integer to type com.sample.model.Car
您可以使用动态实例化。 像这样
select new Car(c.name, c.year) FROM Car c WHERE c.year = :year
或者您可以使用结果转换器(没有 @Query
)。
您可以查看 this 了解有关部分对象加载的一些想法。
更新
并且它需要在 Car
中有 Car(String name, Integer year)
构造函数和默认构造函数。