Запрос результатов непосредственно в DTO - PullRequest
0 голосов
/ 17 февраля 2019

Когда я пытаюсь сделать запрос результатов непосредственно из данных Spring в класс DTO, я получаю эту ошибку

Причина: java.lang.IllegalArgumentException: org.hibernate.QueryException: не удалось разрешить свойство:имя_хозяина: test.dao.bean.Car [ВЫБРАТЬ новый test.dto.bean.CarOwners (c.owner_name, c.owner_nid, c.owner_phone, c.driver_name, c.driver_nid, c.driver_phone) FROM test.dao.bean.Car c] в org.hibernate.internal.ExceptionConverterImpl.convert (ExceptionConverterImpl.java:133) ~ [hibernate-core-5.2.17.Final.jar: 5.2.17.Final] в org.hibernate.internal.ExceptionConverterImpl.convert (ExceptionConverterImpl.java:157) ~ [hibernate-core-5.2.17.Final.jar: 5.2.17.Final] в org.hibernate.internal.ExceptionConverterImpl.convert (ExceptionConverterImpl.java:164) ~ [hibernate-core-5.2.17.Final.jar: 5.2.17.Final] в org.hibernate.internal.AbstractSharedSessionContract.createQuery (AbstractSharedSessionContract.java:670) ~ [hibernate-core-5.2.17.Final.jar: 5.2.17.Final] в org.hibernate.internal.AbstractSessionImpl.createQuery (AbstractSessionImpl.java:23) ~ [hibernate-core-5.2.17.Final.jar: 5.2.17.Final] at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: 1.8.0_152]at sun.reflect..reflect.Method.7.RELEASE.jar: 5.0.7.RELEASE] в com.sun.proxy. $ Proxy123.createQuery (Неизвестный источник) ~ [na: na] в org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery (SimpleJpaQuery.java:87) ~ [spring-data-jpa-2.0.8.RELEASE.jar: 2.0.8.RELEASE] ... опущено 76 общих фреймов

это мой запрос:

@Query("SELECT new test.dto.bean.CarOwners(c.owner_name, c.owner_nid, c.owner_phone, c.driver_name, c.driver_nid, c.driver_phone) FROM car c")
public List<CarOwners> findAllCarOwners(); 

и это класс DTO:

test.dto.bean;

public class CarOwners{

private String owner_name;
private Long owner_nid;
private Integer owner_phone;
private String driver_name;
private Long driver_nid;
private Integer driver_phone;

 public CarOwners(String owner_name, Long owner_nid, Integer owner_phone, String driver_name, Long driver_nid, Integer driver_phone) {
        this.owner_name = owner_name;
        this.owner_nid = owner_nid;
        this.owner_phone = owner_phone;
        this.driver_name = driver_name;
        this.driver_nid = driver_nid;
        this.driver_phone = driver_phone;

    }

public String getOwner_name() {
    return owner_name;
}


public void setOwner_name(String owner_name) {
    this.owner_name = owner_name;
}


public Long getOwner_nid() {
    return owner_nid;
}


public void setOwner_nid(Long owner_nid) {
    this.owner_nid = owner_nid;
}


public Integer getOwner_phone() {
    return owner_phone;
}


public void setOwner_phone(Integer owner_phone) {
    this.owner_phone = owner_phone;
}


public String getDriver_name() {
    return driver_name;
}


public void setDriver_name(String driver_name) {
    this.driver_name = driver_name;
}


public Long getDriver_nid() {
    return driver_nid;
}


public void setDriver_nid(Long driver_nid) {
    this.driver_nid = driver_nid;
}


public Integer getDriver_phone() {
    return driver_phone;
}


public void setDriver_phone(Integer driver_phone) {
    this.driver_phone = driver_phone;
}
}

Любой Hэльп пожалуйста ??

1 Ответ

0 голосов
/ 17 февраля 2019

Причина: java.lang.IllegalArgumentException: org.hibernate.QueryException: не удалось разрешить свойство: имя_хозяина: test.dao.bean.Car

Видимо, поля впредложение select должно ссылаться на имя свойства Java сопоставленной сущности (Car), а не на имя свойства в DTO.

Итак, предположим, что Car:

@Entity
@Table(name="car")
public class Car{


    @Column(name="owner_name")
    private String ownerName;

}

Затем вы должны написать:

@Query("SELECT new test.dto.bean.CarOwners(c.ownerName) FROM car c") 

На самом деле, имена полей DTO не имеют ничего общего с тем, как написать строку @Query.Он просто соответствует порядку между параметром конструктора DTO и полями в предложении SELECT NEW.Вы можете использовать любое имя DTO, если их заказы и тип данных совпадают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...