我有一个上课活动
@Entity
public class Event {
@Id // PrimaryKey
@GeneratedValue(strategy = GenerationType.AUTO)
private int event_id;
private String bezeichnung;
private Date startzeitpunkt;
private Date endzeitpunkt;
private boolean abgeschlossen;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "event_unternehmen", joinColumns = @JoinColumn(name = "event_id"))
@Column(name = "unternehmen_id")
private Set<Integer> teilnehmendeUnternehmen;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "event_studierender", joinColumns = @JoinColumn(name = "event_id"))
@Column(name = "student_id")
private Set<Integer> teilnehmendeStudierende;
我想获取所有event_id的列表,其中特定的student_id位于对象属性teilnehmende_Studierende(设置)中
我尝试过这样的事情:
@Query("SELECT e FROM Event e WHERE e.teilnehmendeStudierende=:userId")
List<Event> findByUserId(@Param("userId") int userId);
但这给了我以下错误:
原因:java.lang.IllegalArgumentException:参数值[28]与预期的类型[java.util.Set(n / a)]不匹配 deployment.speeddating-web-7.0-SNAPSHOT.war // org.hibernate.query.spi.QueryParameterBindingValidator.validate(QueryParameterBindingValidator.java:54)
答案 0 :(得分:0)
您应该使用in
运算符,因为您无法在查询中将集合赋给单个值。请尝试:
存储库:
public interface EventRepository extends JpaRepository<Event, Long> {
List<Event> findByTeilnehmendeStudierendeIn(int userId);
}
测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
@Autowired
private EventRepository eventRepository;
@Test
public void test() {
Event e = new Event();
e.setTeilnehmendeStudierende(new HashSet<Integer>(Arrays.asList(1, 2)));
eventRepository.save(e);
System.out.println("Size " + eventRepository.findByTeilnehmendeStudierendeIn(1).size());
}
}