public interface UserRepository extends CrudRepository<User, Integer> {
@Query(value = "select u from User u")
List<User> selectAllUsers();
@Query(value = "select u from User u where u.username = ?1")
User findByName(String name);
@Query(value = "select u from User u where u.id = ?1")
User findById(Integer id);
@Modifying
@Transactional(readOnly = false)
@Query("UPDATE User u SET u.friends = ?1 WHERE u.id = ?2")
Integer setNewFriendsForId(Set<User> friends, Integer id);
}
Spring为我提供了这个名为UserService的类中使用的接口的实现。但是当我尝试执行这个方法时,我得到了很多异常。
userService.setNewFriendsForId(invitingUser.getFriends(), invitingUser.getId());
根本原因是:
org.postgresql.util.PSQLException:没有为参数2指定值。 org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:178) org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:246) org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512) (...)
任何想法可能是什么原因?选择查询工作正常。
答案 0 :(得分:0)
原因是无法更新集合值字段(u.friends)。在JPA 2.0规范中,用以下词语告知:
update_statement ::= update_clause [where_clause]
update_clause ::= UPDATE entity_name [[AS] identification_variable]
SET update_item {, update_item}*
update_item ::= [identification_variable.]{state_field
| single_valued_object_field} = new_value
new_value ::= scalar_expression | simple_entity_expression | NULL
更新操作仅适用于单值字段,如下所示:
UPDATE User u SET u.someSingleValuedField = ?1