В приложении 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 ?