2016-05-13 151 views
0

這是我第一次使用SpringMVC + Hibernate,所以請原諒我,如果我問一個noob問題。org.hibernate.QueryException:無法解析列名已定義的屬性

數據庫表之間的關係是這樣的: Text in red color are my tables

而我想要實現的搜索user_tasks屬於一些用戶。所以在UserRepository執行我寫了這個:

@Entity 
@Table(name = "usertask") 
public class UserTask { 
    //public enum TaskState {CLAIMED, FINISHED, EXPIRED}; 
    public static int TYPE_CLAIMED = 0; 
    public static int TYPE_FINISHED = 1; 
    public static int TYPE_EXPIRED = 2; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private Integer id; 

    @Column(name = "user_id", nullable = false) 
    private Integer userId; 

    @Column(name = "task_id", nullable = false) 
    private Integer taskId; 

    @Column(name = "curr_usermicrotask_id") 
    private Integer currUserMicrotaskId; 

    @Column(name = "state", nullable = false) 
    private Integer state; 

    //...some getters and setters 
} 

另外,我有用戶任務的類中定義:

@Repository("userTaskRepo") 
public class UserTaskRepoImpl extends AbstractDao<Integer, UserTask> implements UserTaskRepository { 

    public List<UserTask> getByUserId(int userId, int startTaskId, int size) { 
     List<UserTask> userTasks = getSession().createCriteria(UserTask.class) 
       .add(Restrictions.eq("user_id", userId)) 
       .add(Restrictions.ge("task_id", startTaskId)) 
       .setMaxResults(size) 
       .list(); 
     return userTasks; 
    } 
} 

和相關UserTask類定義如下。

然而,當我試圖調用該函數在UserTaskRepoImpl 例外

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.QueryException: could not resolve property: user_id of: edu.inlab.models.UserTask 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:979) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

誰能弄清楚爲什麼會這樣發生錯誤? 在此先感謝!

+0

是它'@Table(名稱= 「usertask」)'?還是應該是@Table(name =「user_tasks」)?你確定表格列被命名爲user_id嗎? – jmcg

回答

3

好吧我自己想清楚了。 這是因爲我混淆了SQL列名(在@Column中定義)與HQL列名。 代碼

.add(Restrictions.eq("user_id", userId)) 
.add(Restrictions.ge("task_id", startTaskId)) 

應改爲

.add(Restrictions.eq("userId", userId)) 
.add(Restrictions.ge("userId", startTaskId)) 
相關問題