没有为参数指定值 - CrudRepository

时间:2014-06-09 18:07:07

标签: spring hibernate postgresql

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) (...)

任何想法可能是什么原因?选择查询工作正常。

1 个答案:

答案 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