![](/img/trans.png)
[英]composed primary key using hibernate with spring data jpa and mysql
[英]retrieving data from mysql using hibernate without primary key in restful web service
我正在使用restful web service
开发Web应用程序。 我已经使用了hibernate
和POJO
进行mysql communication
。
我有具有用户表的数据库,主要数据库是empid
。 为了获得单行,我将empid从html页面传递到了Web服务,并将json对象返回到html页面(使用javascript进行解析)。
我已经使用这一行从数据库where empid=277;
获得单行, where empid=277;
//在这里硬编码
new_user =(用户)session.get(User.class,(long)277);
我想从employeeid的其他列中检索记录(NOT 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)
如果我删除了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();
然后它可以工作并给出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);
谢谢
请使用查询方法uniqueResult()。
Query query = session.createQuery("from user where employeeid= :employee");
query.setParameter("employee", employeeid);
new_user = (User) query. uniqueResult();
您发布的客户端异常无济于事,可以提供服务器端异常stacktrace吗? 我们必须知道什么冬眠的抱怨
解决,
代替
Query query = session.createQuery("from user where employeeid= :employee");
query.setParameter("employee", employeeid);
我已经添加了,
Query query = session.createQuery("from user where employeeid='" + employeeid + "'");
而且效果很好
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.