2016-05-13 7 views
0

Dies ist das erste Mal, dass ich SpringMVC + Hibernate benutze, also vergib mir, wenn ich eine noob Frage gestellt habe.org.hibernate.QueryException: konnte die Eigenschaft mit dem bereits definierten Spaltennamen nicht auflösen

Die Beziehung von Datenbanktabellen wie folgt aussieht: Text in red color are my tables

Und was ich will implementieren ist für user_tasks suchen, die zu einem gewissen Benutzer gehört. So bei der Umsetzung von UserRepository Ich schrieb dies:

@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; 
    } 
} 

und die damit verbundene Usertask Klasse sind wie folgt definiert:

@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 
} 

Auch ich habe Klassen von Benutzer und Aufgabe definiert .

tritt jedoch Fehler, als ich versuchte, die Funktion in der UserTaskRepoImpl Ausnahme zu nennen

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) 

Könnte jemand herausfinden, warum das passiert ist? Vielen Dank im Voraus!

+0

geändert werden ist es '@Table (name = "Usertask")'? Oder sollte es '@Table (Name =" user_tasks ")' sein? Sind Sie sicher, dass die Tabellenspalte den Namen user_id hat? – jmcg

Antwort

3

Okay, ich habe es selbst herausgefunden. Es liegt daran, dass ich den SQL-Spaltennamen (definiert in @Column) mit dem HQL-Spaltennamen verwechselt habe. Der Code

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

sollte

.add(Restrictions.eq("userId", userId)) 
.add(Restrictions.ge("userId", startTaskId)) 
Verwandte Themen