2014-06-09 2 views
0
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 클래스에서 사용되는이 인터페이스의 구현을 제공합니다. 그러나이 메서드를 실행하려고하면 예외적 인 스택이 생깁니다.매개 변수에 값이 지정되지 않았습니다. CrudRepository

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

이유는 컬렉션 값 필드 (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 
+0

- 많은 관계 요? – slakomy

관련 문제