Нулевое значение поля String на проекционном объекте - PullRequest
0 голосов
/ 05 ноября 2018

В приложении Spring Boot у меня есть класс с составным идентификатором, определяемым следующим образом:

@Embeddable
public class StatisticId implements Serializable {

    private static final long serialVersionUID = 1L;

    @Column(length = 255, nullable = false)
    private String shortName;

    @Enumerated(EnumType.STRING)
    @Column(length = 32, nullable = false)
    private Month month;

    @Column(nullable = false)
    private int year;

    // getters, setters, equals, hashCode, toString
}

(упрощенное) определение класса:

@Entity
public class Statistic implements Serializable {

    private static final long serialVersionUID = 1L;

    private BigDecimal sales;

    @EmbeddedId
    private StatisticId id;

    // getters, setters, toString
}

Я хочу сделать прогноз этого класса:

public interface StatisticProjection {
    public String getShortName();
    public Month getMonth();
    public int getYear();
    public BigDecimal getSales();
}

и используйте его в следующем хранилище:

public interface StatisticsRepository extends CrudRepository<Statistic, Long> {
    @Query(value = "select short_name, month, year, sales from statistic where short_name in = ?1", nativeQuery = true)
    Iterable<StatisticProjection> findByShortName(Collection<String> shortNames);

}

Результат вызова метода findByShortName приводит к списку ожидаемых элементов, за исключением того, что каждый из них имеет нулевое значение shortName (остальные поля верны).

Я выполняю точно такой же запрос непосредственно в базе данных MySQL, и он возвращает правильные значения столбца short_name .

Что мне нужно сделать, чтобы в моем классе проекции было действительное shortName ?

1 Ответ

0 голосов
/ 21 июня 2019

Кажется, что проекции не очень хорошо работают с нативными запросами, подчеркнутыми, чтобы быть более точными. Чтобы получить поле с подчеркиванием, используйте подчеркивание в методе get. Поэтому вместо использования getShortName() используйте getShort_name()

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