Java 在RESTfulWeb服务中使用hibernate从mysql检索数据而不使用主键

Java 在RESTfulWeb服务中使用hibernate从mysql检索数据而不使用主键,java,json,hibernate,rest,Java,Json,Hibernate,Rest,我正在使用RESTfulWeb服务开发web应用程序。 我使用了hibernate和POJO来mysql通信 我有一个数据库,它有用户表,主要是empid。 为了获得单行,我将empid从html页面传递到web服务,并将json对象返回到html页面(javascript用于解析) 我用这个函数从DB中得到了单行,其中empid=277//此处硬编码 new_user=(user)session.get(user.class,(long)277) 我想从其他列检索记录,比如employeeid

我正在使用RESTfulWeb服务开发web应用程序。 我使用了
hibernate
POJO
mysql通信

我有一个数据库,它有用户表,主要是
empid
。 为了获得单行,我将empid从html页面传递到web服务,并将json对象返回到html页面(javascript用于解析)

我用这个函数从DB
中得到了单行,其中empid=277//此处硬编码

new_user=(user)session.get(user.class,(long)277)

我想从其他列检索记录,比如employeeid(不是empid,empid是主键)

我已经从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有没有其他方法可以在没有主键的情况下获取数据 像

获取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)


谢谢

请使用查询方法uniqueResult()


您发布的客户端异常没有帮助,您可以提供服务器端异常stacktrace吗?我们必须知道hibernate投诉解决了哪些问题

而不是

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

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

它工作得很好

我已经尝试过了,但是错误仍然存在。我已经进行了有问题的更新,您正在使用query.list();它返回List,而您正在将List强制转换为用户对象,这就是它抛出Exception的原因。我也尝试过使用query.List().getIndex(0),但出现了相同的错误
 Query query = session.createQuery("from user where employeeid= :employee");
 query.setParameter("employee", employeeid);
 new_user = (User) query. uniqueResult();
Query query = session.createQuery("from user where employeeid= :employee");
query.setParameter("employee", employeeid);
Query query = session.createQuery("from user where employeeid='" + employeeid + "'");