2013-08-02 65 views
0

我正在使用restful web service開發Web應用程序。 我已經使用hibernatePOJOmysql communication使用休眠狀態下的無主鍵休眠狀態下從mysql中檢索數據

我有數據庫,其中有用戶表和主要是empid。 爲了獲得單行,我已經將HTML頁面中的empid傳遞給web服務,並將json對象返回給html頁面(javascript用於解析)。

我已經使用這個之一從DB where empid=277;獲得單列//這裏硬編碼

new_user =(用戶)session.get(User.class,(長)277);

我想要從像僱員另一列記錄(不EMPID,EMPID是主鍵)

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

我已經通過了由html頁面是字符串employeeid

我寫Web服務一樣

@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的預期結果。

我在做什麼錯誤的查詢。 並在那裏與Hibernate任何其他方式來獲得無主鍵 數據,如

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

我的JSP文件,獲取JSON對象是

<% 

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);

謝謝

回答

0

解決,

,而不是

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

我加入,

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

,它工作正常

0

請使用Query方法uniqueResult()。

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

我試圖與這一點,但錯誤仍然存​​在。我在更新中提出了問題 –

+0

您正在使用query.list();它返回列表,你正在投擲列表到用戶對象,這就是爲什麼它拋出異常 –

+0

我已經嘗試與query.list()。getIndex(0)也同樣的錯誤 –

0

您發佈的客戶端異常無濟於事,您能否提供服務器端異常stacktrace?我們要知道什麼是休眠投訴