Spring:如何在投影中使用SpEL表达式

时间:2018-06-06 04:50:19

标签: java spring expression entity projection

在投影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
}

ProgramSchedule

@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;
    }

1 个答案:

答案 0 :(得分:0)

您的ProgramSchedule实体似乎没有引用Level


此外,在使用投影时,应使用

#{target.programSchedule.level.colorCode}

代替bean /参数名。春季博客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/#projections-excerpts.projections

的末尾也对此进行了简要提及