1
我有一個基於this tutorial的spring mvc 3.1應用程序。我已經將應用程序修改爲基於註釋的應用程序,並且調整了視圖處理程序以通過jstl使用InternalResourceViewResolver,該工作正常。Hibernate QueryParameterException Spring MVC&JSON
在應用程序使用彈簧MVC中,彈簧數據JPA和的jqGrid以產生具有基本的CRUD映射動作傳遞到控制器通過響應一個簡單的用戶列表簡而言之...
當我嘗試修改通過更新動作我得到500錯誤(AOP跟蹤攔截器)記錄......
異常 ...
Servlet.service() for servlet [dispatcher] in context with path
[/spring-jqgrid-tutorial] threw exception [Request processing failed;
nested exception is org.springframework.dao.InvalidDataAccessApiUsageException:
org.hibernate.QueryParameterException:
Position beyond number of declared ordinal parameters.
Remember that ordinal parameters are 1-based!
...
at org.beckett.service.UserService.update(UserService.java:32)
UserService ...
...
public Boolean update(User user) {
User existingUser = repository.findByUsername(user.getUsername());
if(existingUser == null) {
return false;
}
// Only firstName, lastName, and role fields are updatable
existingUser.setFirstName(user.getFirstName());
existingUser.setLastName(user.getLastName());
existingUser.getRole().setRole(user.getRole().getRole());
User saved = repository.save(existingUser);
if(saved == null)
return false; {
}
return true;
}
...
用戶實體
@Entity(name = "user")
@NamedQuery(name = User.FIND_BY_USERNAME,
query = "select u from user u where u.username = :username")
public class User {
public static final String FIND_BY_USERNAME = "User.findByUsername";
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String firstName;
private String lastName;
@Column(unique = true)
private String username;
@JsonIgnore
private String password;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
private Role role;
...
UserRepository
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
Page<User> findByUsernameLike(String username, Pageable pageable);
Page<User> findByFirstNameLike(String firstName, Pageable pageable);
Page<User> findByLastNameLike(String lastName, Pageable pageable);
Page<User> findByFirstNameLikeAndLastNameLike(String firstName, String lastName, Pageable pageable);
@Query("select u from user u where u.role.role = :role")
Page<User> findByRole(@Param("role") Integer role, Pageable pageable);
}
UserController的
@RequestMapping(value = "/update",
produces = "application/json",
method = RequestMethod.POST)
public @ResponseBody StatusResponse update(
@RequestParam String username,
@RequestParam String firstName,
@RequestParam String lastName,
@RequestParam Integer role) {
User existingUser = new User(username, firstName, lastName, new Role(role));
Boolean result = service.update(existingUser);
return new StatusResponse(result);
}
我已經看到了關於這個陳述的例外的要求來改變HQL查詢多個線程。不過,我不知道如何去調試這個問題...
是否有您的命名查詢的原因?存儲庫應爲您創建查詢。 – micha
我也有一個jparepo實現...我將它添加到示例中... –