来自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();