В проекции 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;
}




Ваш объект 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.