Java JPA查询返回实体列表

Java JPA查询返回实体列表,java,sql,spring,jpa,oql,Java,Sql,Spring,Jpa,Oql,我有一个班级活动 @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; @Elem

我有一个班级活动

@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; 
@实体
公开课活动{
@Id//PrimaryKey
@GeneratedValue(策略=GenerationType.AUTO)
私有int事件标识;
私有字符串bezeichung;
私人约会开始;
私人日期endzeitpunkt;
私有布尔abgeschlossen;
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name=“event\u unternehmen”,joinColumns=@JoinColumn(name=“event\u id”))
@列(name=“unternehmen\u id”)
私人电视台;
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name=“event\u studierender”,joinColumns=@JoinColumn(name=“event\u id”))
@列(name=“student\u id”)
私人设置Teinnehmendestudieride;
我想获得所有事件id的列表,其中特定的学生id位于objectattribute teilnehmende_Studierende(集合)中

我试过这样的方法:

@Query("SELECT e FROM Event e WHERE e.teilnehmendeStudierende=:userId") 
List<Event> findByUserId(@Param("userId") int userId);  
@Query(“从事件e中选择e,其中e.teilnehmendestudieride=:userId”)
列出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)


您应该在运算符中使用
,因为在查询中您不能将集合分配给单个值。请尝试:

存储库:

public interface EventRepository extends JpaRepository<Event, Long> {
    List<Event> findByTeilnehmendeStudierendeIn(int userId);
}
public interface EventRepository扩展了JpaRepository{
列出FindBytelnehmenDestuderendein(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());
    }
}
@RunWith(SpringRunner.class)
@春靴测试
公共类应用程序测试{
@自动连线
私有事件存储库事件存储库;
@试验
公开无效测试(){
事件e=新事件();
e、 settelnehmendestudieride(新的HashSet(Arrays.asList(1,2));
eventRepository.save(e);
System.out.println(“Size”+eventRepository.findbytelnehmendestuderendein(1.Size());
}
}

您应该在
运算符中使用
,因为在您的查询中,您不能将集合分配给单个值。请尝试:

存储库:

public interface EventRepository extends JpaRepository<Event, Long> {
    List<Event> findByTeilnehmendeStudierendeIn(int userId);
}
public interface EventRepository扩展了JpaRepository{
列出FindBytelnehmenDestuderendein(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());
    }
}
@RunWith(SpringRunner.class)
@春靴测试
公共类应用程序测试{
@自动连线
私有事件存储库事件存储库;
@试验
公开无效测试(){
事件e=新事件();
e、 settelnehmendestudieride(新的HashSet(Arrays.asList(1,2));
eventRepository.save(e);
System.out.println(“Size”+eventRepository.findbytelnehmendestuderendein(1.Size());
}
}

TeilNehmendestudierNode中的运算符需要一个集合参数,在方法public abstract java.util.List de.swprojekt.speeddating.repository.IEventRepository.FindBytielnehmendStudierEndein(int)中可以找到int。“”我测试了我的代码,它可以正常工作。存储库方法FindBytelnehmendStudierEndIn与findByUserId具有相同的签名:它接受int参数并返回事件列表。是否尝试运行ApplicationTests类?TeilNehmendStudierEnde中的运算符需要一个集合参数,在方法公共抽象java中找到int.util.List de.swprojekt.speeddating.repository.IEventRepository.findbytielnehmenstuderendein(int)。“}我测试了我的代码,它可以正常工作。存储库方法findbytelnehmendestuderendein与findByUserId具有相同的签名:它接受一个int参数并返回一个事件列表。您是否尝试运行ApplicationTests类?