【问题标题】:org.hibernate.QueryException: could not resolve property with column name already definedorg.hibernate.QueryException:无法解析已定义列名的属性
【发布时间】:2016-05-13 08:26:17
【问题描述】:

这是我第一次使用 SpringMVC+Hibernate,如果我问了一个菜鸟问题,请见谅。

数据库表的关系是这样的:

而我想要实现的是搜索属于某个用户user_tasks。所以在 UserRepository 的实现中我写了这个:

@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类定义如下:

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

另外,我定义了 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)

有人能弄清楚为什么会这样吗? 提前致谢!

【问题讨论】:

  • @Table(name = "usertask")吗?还是应该是@Table(name = "user_tasks")?你确定表列被命名为user_id?

标签: java mysql hibernate spring-mvc


【解决方案1】:

好吧,我自己想通了。 这是因为我将 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))

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 2013-07-25
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2017-09-30
    • 1970-01-01
    相关资源
    最近更新 更多