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实现...我将它添加到示例中... –