================原始问题(不重复)==================
我正在使用Spring MVC,maven,Spring Data JPA,hsqldb ...... 我制作了Spring Data JPA实体,存储库和服务(声明接口)。 (所有相关代码都附有评论[1],[2])
一般来说,工作正常。然而....
自定义存储库函数之一即使在编译之前也会出现错误。
这两个存储库函数用于在db中搜索具有不同id的Task(每个任务实体包含两个不同的id:TaskId,task_id)
'无效的派生查询!找不到类型为任务的属性!'
我的代码如下:
=== TaskRepository.java ======
public interface TaskRepository extends JpaRepository<Task, Integer>{
Task findByTaskId(String taskId); //[1] works find
Task findOnebyTaskid(String task_id); // [2][Error message] Invalid derived query! No property find found for type Task!
========= TaskService.java ================
@Service
public class TaskService {
@Autowired
private TaskRepository taskRepository;
public Task findByTaskID(String taskId){ //[1] works find
return taskRepository.findByTaskId(taskId);
}
public Task findOnebyTaskid(String task_id){ // [2]
return taskRepository.findOnebyTaskid(task_id);
}
========= Task.java =======================
@Entity
public class Task{
//[1] works find
private String taskId;
public String getTaskId() {
return taskId;
}
@Column(unique = true) // [Q]necssary or not?
public void setTaskId(String taskId) {
this.taskId = taskId;
}
// [2]
private String task_id;
public String getTask_id() {
return task_id;
}
public void setTask_id(String task_id) {
this.task_id = task_id;
}
====== Test.java ================
Task findtaskbyID = taskService.findByTaskID(taskID); //[1] - works find
Task findbytaskid = taskService.findOnebyTaskid(task_id); // [2]
我正在使用这些版本(以防万一,如果需要检查):
spring framework: ver 4.0.2.RELEASE
hsqldb: ver 2.3.2
spring-data-jpa: ver 1.7.2.RELEASE
hibernate-entitymanager: ver 4.3.8.Final
提前致谢。 [解决方案]
@Query("select t from Task t where t.task_id = ?1")
Task findOnebyTaskid(String task_id);
====更新后的问题(重复但不是原始问题)===========
通过@RC的建议应用此@Query("select t from Task t where t.task_id = ?1")
:
TaskRepository.java ...
@Query("select t from Task t where t.task_id = ?1")
Task findOnebyTaskid(String task_id);
它第一次起作用,然后从第二次编辑其他任务时出现错误。
Caused by:
java.lang.NullPointerException
at my.forecastAway.controller.TaskController.editTask(TaskController.java:352)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:690)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:711)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1644)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)