来自2个表和Spring数据JPA的自定义查询
例外情况:来自2个表和Spring数据JPA的自定义查询,spring,spring-data-jpa,spring-data,spring-data-rest,Spring,Spring Data Jpa,Spring Data,Spring Data Rest,例外情况: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] to type [model.pojo.CarPrice] 我有两张桌子
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] to type [model.pojo.CarPrice]
我有两张桌子
+------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+----------------+
| car_id | int(11) | NO | PRI | NULL | auto_increment |
| car_brand | varchar(255) | NO | | NULL | |
| car_model | varchar(255) | YES | | NULL | |
| car_plate_number | varchar(255) | NO | | NULL | |
| car_type | varchar(255) | YES | | NULL | |
+------------------+--------------+------+-----+---------+----------------+
及
我试图从车上获取全部数据和部分CarRentDetails
在我的随身携带中
@Repository
public interface CarRepository extends JpaRepository<Car, Integer> {
String ALL_AVAILIABLE_CAR_LIST_PRICE = " SELECT c.car_id, c.car_brand, c.car_model,
c.car_plate_number, c.car_type, crd.cost_per_day, crd.avaliable_to_rent " +
" FROM car_info c " +
" JOIN car_rent_details crd" +
" ON c.car_id = crd.car_rent_details_id" +
" AND crd.avaliable_to_rent = true ";
@Query(value = ALL_AVAILIABLE_CAR_LIST_PRICE, nativeQuery = true)
List<CarPrice> findAllByAvaliablePrice();
如何从该查询映射对象?创建投影界面而不是POJO
public interface CarPrice {
Integer getCarId();
String getCarBrand();
String getCarModel();
String getCarPlateNumber();
CarType getCarType();
double getCostPerDay();
boolean isAvaliableToRent();
}
并格式化查询,以返回符合投影接口getter的字段(带别名的映射)
String ALL_AVAILIABLE_CAR_LIST_PRICE = " SELECT c.car_id AS carId, c.car_brand AS carBrand, c.car_model AS carModel,
c.car_plate_number AS carPlateNumber, c.car_type AS carType, crd.cost_per_day AS costPerDay, crd.avaliable_to_rent AS avaliableToRent" +
" FROM car_info c " +
" JOIN car_rent_details crd" +
" ON c.car_id = crd.car_rent_details_id" +
" AND crd.avaliable_to_rent = true ";
@Query(value = ALL_AVAILIABLE_CAR_LIST_PRICE, nativeQuery = true)
List<CarPrice> findAllByAvaliablePrice();
String ALL\u available\u CAR\u LIST\u PRICE=“选择c.CAR\u id作为carId,选择c.CAR\u品牌作为carBrand,选择c.CAR\u车型作为carModel,
c、 汽车车牌号为车牌号,c.汽车类型为车型,crd.每日成本为每日成本,crd.可供出租为可供出租”+
“来自汽车信息中心”+
“加入汽车租赁详细信息crd”+
“在c.car\u id=crd.car\u rent\u details\u id上”+
“和crd.available\u to\u rent=true”;
@查询(值=所有可用车辆列表价格,nativeQuery=true)
列出FindAllByAvailablePrice();
希望这有帮助谢谢,这帮了大忙。你知道什么定义了顺序吗?首先是哪个变量?我的Json现在看起来是这样的:{“carPlateNumber”:“ZS11110”,“carId”:1,“carType”:“CLASSIC”,“AvailableTorent”:true,“carBrand”:“VOLVO”,“carModel”:“V40”,“costPerDay”:89.0}但如果是这样的话更好:{carId carBrand carModel carPlateNumber costPerDay AvailableTorent}第二个json反映了我的投影界面中的顺序。如何将顺序重新排列为Json可能与第二个类似?只需在接口
CarPrice
上为Json属性顺序指定注释,如@JsonPropertyOrder({“carId”、“carBrand”、“carModel”、“carPlateNumber”、“costPerDay”、“availabletorent”})
。如果符合您的目的,请将答案标记为已接受。
public interface CarPrice {
Integer getCarId();
String getCarBrand();
String getCarModel();
String getCarPlateNumber();
CarType getCarType();
double getCostPerDay();
boolean isAvaliableToRent();
}
String ALL_AVAILIABLE_CAR_LIST_PRICE = " SELECT c.car_id AS carId, c.car_brand AS carBrand, c.car_model AS carModel,
c.car_plate_number AS carPlateNumber, c.car_type AS carType, crd.cost_per_day AS costPerDay, crd.avaliable_to_rent AS avaliableToRent" +
" FROM car_info c " +
" JOIN car_rent_details crd" +
" ON c.car_id = crd.car_rent_details_id" +
" AND crd.avaliable_to_rent = true ";
@Query(value = ALL_AVAILIABLE_CAR_LIST_PRICE, nativeQuery = true)
List<CarPrice> findAllByAvaliablePrice();