【发布时间】:2020-11-29 04:16:22
【问题描述】:
我想使用 Spring 框架和 Hibernate 将 List<Completed> 对象插入到关系表中。
我的实体类有 Collections List 字段 -
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
...
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Completed> completedList;
... // getters/setters
}
数据访问存储库 -
public interface UserRepository extends CrudRepository<User, Long> {
Optional<User> findByEmail(String email);
@Modifying
@Query(value = "update User set completedList = :completed where id = :id")
@Transactional
void addNewCompletion(@Param("completed") List<Completed> completed,
@Param("id") long userID);
}
我正在调用该方法(出于测试目的)-
Completed completed1 = new Completed(1, LocalDateTime.now());
Completed completed2 = new Completed(2, LocalDateTime.now());
Completed completed3 = new Completed(3, LocalDateTime.now());
List<Completed> completedList = List.of(completed1, completed2, completed3);
// completedList.add(completed1);
UserService.updateUserCompletion(completedList, UserService.findUserID(currentUser));
我也试过了-
List<Completed> completedList = new ArrayList()<>;
completedList.add(new Completed()); // etc.
Completed completed = new Completed(1, LocalDateTime.now());
UserService.updateUserCompletion(completed, UserService.findUserID(currentUser));
无论哪种方式都会导致相同的异常 -
java.lang.IllegalArgumentException: Parameter value [io.github.siaust.web_quiz_app.Model.Completed@2f1eafc2] did not match expected type [java.util.Collection (n/a)]
我无法理解,因为我将List<Completed> 对象传递给自定义@Query 的@Param?为什么类型不匹配?
【问题讨论】:
标签: java spring-boot hibernate collections orm