Spring: как использовать выражение SpEL в проекции

В проекции ScheduledSessionWithDetail я хочу добавить значение из другой связанной таблицы, для этого я использую выражение SpEL, но его не рабочий столбец colorcode, который я хочу получить через выражение, не возвращающееся с оставшимися полями, может ли кто-нибудь сказать мне, где я ошибаюсь?

ScheduledSessionWithDetail

@Projection(name = "ScheduledSessionWithDetail",types=ScheduleSession.class)
public interface ScheduledSessionWithDetail {

    Long getId();

    int getStartTime();

    int getEndTime();

    DayOfWeek getDay();

    User getCoach();

    @Value("#{scheduleSession.programSchedule.level.colorCode}")
    String colorCode();
}

SchduleSession.java

@Entity
public class ScheduleSession {

    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Long id;

    private int startTime;

    private int endTime;

    private boolean enabled=true;

    @OneToOne
    private User coach;

    @ManyToOne
    private ProgramSchedule programSchedule;

    @Enumerated(EnumType.STRING)
    private DayOfWeek day;
//getter and setter
}

Программа

@Entity
public class ProgramSchedule {

    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Long id;

    private String name;

    @JoinColumn(name = "venue_id")
    @ManyToOne
    private Venue venue;

    @JoinColumn(name = "program_id")
    @ManyToOne
    private Program program;

    private boolean enabled=true;

    @OneToOne
    private Term term;
    }

Уровень

@Entity
public class Level{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String level;

    private int minimumAge=0;

    private int maximumAge=0;

    private int duration=0;

    private int capacity=0;

    private String colorCode;
    }
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
1 073
1

Ответы 1

Ваш объект ProgramSchedule, похоже, не имеет ссылки на Level


Кроме того, при работе с проекциями следует использовать

#{target.programSchedule.level.colorCode}

вместо имени компонента / параметра. Об этом упоминается в весеннем блоге https://spring.io/blog/2014/05/21/what-s-new-in-spring-data-dijkstra, а также кратко упоминается в конце https://docs.spring.io/spring-data/rest/docs/current/reference/html/#projection-excerpts.projection.

Другие вопросы по теме