gpt4 book ai didi

java - JPA查询返回实体列表

转载 作者:太空宇宙 更新时间:2023-11-04 09:14:30 24 4
gpt4 key购买 nike

我有一个类(class) Activity

@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 (Set) 中

我尝试过这样的事情:

@Query("SELECT e FROM Event e WHERE e.teilnehmendeStudierende=:userId") 
List<Event> findByUserId(@Param("userId") int userId);

但它给了我以下错误:

Caused by: java.lang.IllegalArgumentException: Parameter value [28] did not match expected type [java.util.Set (n/a)] at deployment.speeddating-web-7.0-SNAPSHOT.war//org.hibernate.query.spi.QueryParameterBindingValidator.validate(QueryParameterBindingValidator.java:54)

最佳答案

您应该使用 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());
}
}

关于java - JPA查询返回实体列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59234029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com