2017-09-27 65 views
0

说我有一个名为entityUserSchedule以下如何使用@Query在hibernate的集合上实现where子句?

@Entity 
@Table(name = "user_schedule") 
public class UserSchedule { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 

    @Column(name = "user_id") 
    private long userId; 

    @OneToMany(cascade = CascadeType.ALL) 
    @JoinColumn(name = "schedule_id", referencedColumnName = "id") 
    private Set<Schedule> schedules; 
} 

在我UserScheduleRepository我要过滤的时间表。像这样@Query("select us from UserSchedule us where us.schedules.id = 1")。但由于时间表是一个集合而不是Schedule实体,因此这将不合法。我如何在休眠状态下实现这一点?

回答

1

您可以使用JPQL联接(JPQL Joins Documentation

@Query("select us from UserSchedule us, IN(us.schedules) sh where sh.id = ?1") 
UserSchedule getByScheduleId1(long id); 

@Query("select us from UserSchedule us join us.schedules sh where sh.id = ?1") 
UserSchedule getByScheduleId2(long id); 

如果你有一个像

@Entity 
@Table(name = "schedule") 
public class Schedule { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 

    @ManyToOne 
    private UserSchedule schedule; 

... 

@ManyToOne反向引用场你也可以尝试像

@Query("select us from UserSchedule us where us.id in (select s.schedule from Schedule s where s.id = ?1)") 
+0

感谢。我仍然无法获得集合的工作,但反向引用工作! – user1865027