Spring JPA Projection - Запрашиваемые данные из репозитория jpa - PullRequest
0 голосов
/ 08 июня 2018

Я не знаю, возможно ли это, но я пытаюсь проецировать данные, запрашиваемые из репозитория JPA, в DTO

У меня следующий запрос:

@Query(value =
        "SELECT crop.id, count(*) as total " +
        "FROM xxx.crop_sub_plot " +
        "join crop on crop.id = crop_sub_plot.crop_id " +
        "join sub_plot on sub_plot.id = crop_sub_plot.sub_plot_id " +
        "where sub_plot.enabled = true " +
        "group by crop_id " +
        "order by total DESC;", nativeQuery = true)
List<CropUsedView> findCropsInUseOrderByDesc();

и DTO:

public class CropUsedView implements Serializable{

private BigInteger id;
private BigInteger total;

public CropUsedView() {
}

public CropUsedView(BigInteger id, BigInteger total) {
    this.id = id;
    this.total = total;
}

//getters && setters

Я получаю сообщение об ошибке:

Не найден конвертер, способный преобразовать тип [java.math.BigInteger] в тип [net.xxx.crop.CropUsedView]

Я действительно не знаю, возможно ли это, любое предложение?

РЕДАКТИРОВАТЬ: это то, как данные возвращаются, когда я запускаюзапрос на MySql и как я хочу быть преобразован в DTO:

enter image description here

1 Ответ

0 голосов
/ 08 июня 2018

Ваш запрос возвращает два значения: идентификатор и число (оба могут быть отображены в long или BigDecimal).Но Hibernate, поскольку он не отображается непосредственно в объект, просто возвращает BigDecimal[].

. Чтобы решить эту проблему, вы должны использовать пользовательский преобразователь: UserType (https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/usertype/UserType.html).).отобразить любой ответ в объект с помощью ручного анализа.

...