2017-09-27 93 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

相關問題