【问题标题】:retrieving data from mysql using hibernate without primary key in restful web service在restful web服务中使用没有主键的hibernate从mysql中检索数据
【发布时间】:2013-08-02 05:47:47
【问题描述】:

我正在使用 restful web service 开发 Web 应用程序。 我用过hibernatePOJOmysql communication

我有一个包含用户表的数据库,主要是empid。 为了获取单行,我将 html 页面中的 empid 传递给 Web 服务,并将 json 对象返回给 html 页面(使用 javascript 进行解析)。

我已经使用这个从 DB where empid=277; 获取单行 // 这里硬编码

new_user = (User) session.get(User.class, (long)277);

我想从其他列中检索记录,例如empidid(不是empid,empid 是主键)

select * user where employeeid="XX-123XD"

我已经从 html 页面传递了employeeid,它是字符串。

我写过类似的网络服务

    @POST
    @Path("/getjson")
    @Produces("application/json")
    public JSONObject sendjson(String employeeid) {

            Gson gsonobj = new Gson();
            JSONObject jsonobj = null;

            SessionFactory fact;
            fact = new Configuration().configure().buildSessionFactory();
            User new_user = null;

            Session session = fact.getCurrentSession();
            Transaction tx =  session.beginTransaction();
            Query query = session.createQuery("from user where employeeid= :employee");
            query.setParameter("employee", employeeid);
            //new_user = (User) session.get(User.class, (long)277);
            new_user = (User) query.list();

        try {    
            String jsonstr = gsonobj.toJson(new_user);
            jsonobj = new JSONObject(jsonstr);
        } catch (JSONException ex) {
            Logger.getLogger(Authneticate.class.getName()).log(Level.SEVERE, null, ex);
        }
        return jsonobj;
    }

但我得到了这样的错误,

type Exception report

message com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class org.codehaus.jettison.json.JSONObject, and Java type class org.codehaus.jettison.json.JSONObject, and MIME media type text/html; charset=utf-8 was not found

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class org.codehaus.jettison.json.JSONObject, and Java type class org.codehaus.jettison.json.JSONObject, and MIME media type text/html; charset=utf-8 was not found
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root cause

com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class org.codehaus.jettison.json.JSONObject, and Java type class org.codehaus.jettison.json.JSONObject, and MIME media type text/html; charset=utf-8 was not found
    com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:561)
    com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:517)
    org.apache.jsp.HomeUser_jsp._jspService(HomeUser_jsp.java:91)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

如果我删除了查询语句,并取消注释代码,那么该块是

    Session session = fact.getCurrentSession();
    Transaction tx =  session.beginTransaction();
    //Query query = session.createQuery("from user where employeeid= :employee");
    //query.setParameter("employee", employeeid);
    new_user = (User) session.get(User.class, (long)277);
    //new_user = (User) query.list();

然后它可以工作并给出empid=277 的预期结果,这是主键。

我做错了什么查询。 还有没有其他方法可以使用休眠来获取没有主键的数据 喜欢

`new_user = (User) session.get(User.class, employeeid);`
                                                  |
                                          String(Not the primary key)

我获取 JSON 对象的 jsp 文件是

<%

Client client = Client.create();
WebResource service = client.resource("http://localhost:8080/ITHelpdesk/webresources/hello/getjson");
String input = request.getParameter("username");
ClientResponse cliresponse = service.type("text/html").post(ClientResponse.class,input);
JSONObject jsonobj = cliresponse.getEntity(JSONObject.class);

%>

我尝试过使用new_user = (User) query.uniqueResult(); 然后也发生了同样的错误JSONObject jsonobj = cliresponse.getEntity(JSONObject.class);

谢谢

【问题讨论】:

    标签: java json hibernate rest


    【解决方案1】:

    请使用查询方法 uniqueResult()。

     Query query = session.createQuery("from user where employeeid= :employee");
     query.setParameter("employee", employeeid);
     new_user = (User) query. uniqueResult();
    

    【讨论】:

    • 我已经尝试过,但错误仍然存​​在。我已经进行了有问题的更新
    • 你正在使用 query.list();它返回 List 并且您将 List 转换为 User 对象,这就是它抛出异常的原因
    • 我也试过 query.list().getIndex(0) 但同样的错误
    【解决方案2】:

    您发布的客户端异常没有帮助,您可以提供服务器端异常堆栈跟踪吗?我们要知道hibernate的抱怨是什么

    【讨论】:

      【解决方案3】:

      已解决,

      而不是

      Query query = session.createQuery("from user where employeeid= :employee");
      query.setParameter("employee", employeeid);
      

      我已经添加了,

      Query query = session.createQuery("from user where employeeid='" + employeeid + "'");
      

      而且效果很好

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-24
        • 2017-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-26
        • 1970-01-01
        相关资源
        最近更新 更多