Spring Data JPA自定义存储库函数错误 - 无效的派生查询!找不到类型

时间:2015-05-04 10:04:00

标签: java hibernate spring-mvc jpa spring-data-jpa

================原始问题(不重复)==================

我正在使用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)

0 个答案:

没有答案