简体   繁体   English

在宁静的Web服务中使用没有主键的Hibernate从MySQL检索数据

[英]retrieving data from mysql using hibernate without primary key in restful web service

I am developing web application using restful web service . 我正在使用restful web service开发Web应用程序。 I have used hibernate and POJO to mysql communication . 我已经使用了hibernatePOJO进行mysql communication

I have database which has the user table and the primary is the empid . 我有具有用户表的数据库,主要数据库是empid For getting the single row, I have passed the empid from html page to the web service and return the json object to the html page(javascript is used for parsing). 为了获得单行,我将empid从html页面传递到了Web服务,并将json对象返回到html页面(使用javascript进行解析)。

I have used this one to get the single row from DB where empid=277; 我已经使用这一行从数据库where empid=277;获得单行, where empid=277; // Hardcoded here //在这里硬编码

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

I want to retrieve record from other column like employeeid( NOT empid,empid is primary key) 我想从employeeid的其他列中检索记录(NOT empid,empid是主键)

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

I have passed the employeeid from html page which is string. 我已经从html页面(字符串)传递了employeeid

I have written web service like 我写过像

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

But i get the error like, 但是我得到这样的错误,

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)

If I removed Query statements, and uncomment the code then that block is 如果我删除了Query语句,并取消注释代码,则该块为

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

then it works and gives the expected result for empid=277 which is primary key. 然后它可以工作并给出empid=277的预期结果,这是主键。

What I am doing wrong with Query. 我在做错查询。 And Is there any other way with hibernate to get data without primary key like 还有休眠是否有其他方法可以在没有主键的情况下获取数据,例如

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

My jsp file which gets the JSON object is 我的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);

%>

I have tried using using new_user = (User) query.uniqueResult(); 我试过使用new_user = (User) query.uniqueResult(); Then also same error occurred JSONObject jsonobj = cliresponse.getEntity(JSONObject.class); 然后也发生了相同的错误JSONObject jsonobj = cliresponse.getEntity(JSONObject.class);

Thank you 谢谢

Please use Query method uniqueResult(). 请使用查询方法uniqueResult()。

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

the client side exception you posted doesn't help, can you provide the server side exception stacktrace? 您发布的客户端异常无济于事,可以提供服务器端异常stacktrace吗? we have to know what hibernate complaints 我们必须知道什么冬眠的抱怨

resolved, 解决,

instead of 代替

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

I have added, 我已经添加了,

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

And it works fine 而且效果很好

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM