Jpa 使用“and”运算符对2个条件进行JPQL查询
我必须在活跃的用户中搜索,并且使用特定的关键字。我有User和User_personal类,但在User_personal类中我没有状态,所以我使用搜索通过User搜索User_personal,因为User类中有一个Activeusers查找函数,如下所示Jpa 使用“and”运算符对2个条件进行JPQL查询,jpa,jpql,objectdb,Jpa,Jpql,Objectdb,我必须在活跃的用户中搜索,并且使用特定的关键字。我有User和User_personal类,但在User_personal类中我没有状态,所以我使用搜索通过User搜索User_personal,因为User类中有一个Activeusers查找函数,如下所示 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// TODO Auto-generated method stub
HashMap<String,String> map = RequestToMap.getBody(request);
JsonObject output = new JsonObject();
JsonArray SearchArray = new JsonArray();
boolean validToken=true;
if(validToken == true){
EntityManager em = Entitymanager.getEntitymanager();
try{
String name = map.get("fname");
if(name!=null && !name.isEmpty()){
List<User> user = User.search(name, em);
if(user!=null && !user.isEmpty()){
for(User u :user){
if(User.ActiveUsers(em).contains(u)){
JsonObject personal_details = new JsonObject();
personal_details .addProperty("id",u.getId());
personal_details .addProperty("email", u.getUser_p().getEmail());
User current_user = User.find(u.getUser_p().getEmail(), em);
personal_details.addProperty("status",current_user.getStatus().toString());
personal_details .addProperty("first_name", u.getUser_p().getFname());
personal_details .addProperty("last_name", u.getUser_p().getLname());
personal_details .addProperty("image", u.getUser_p().getImage());
personal_details .addProperty("score",current_user.getScore());
SearchArray.add(personal_details);
}
}
if((SearchArray.size()!=0))
output.add("searched_users",SearchArray);
else
output.addProperty(Constants.MESSAGE, "ACTIVE User not found. Try typing another name");
}
else
output.addProperty(Constants.MESSAGE, "User not found.Try typing another name");
}
else
output.addProperty(Constants.MESSAGE, "Please type a name to search");
}
finally{
if(em.getTransaction().isActive())
em.getTransaction().rollback();
em.close();
}
}
response.setContentType("application/JSON");
response.getWriter().println(output);
}
我在User_personal类中的搜索
我有个例外
<pre>com.objectdb.o.InternalException: Unexpected internal exception
com.objectdb.o.JPE.h(JPE.java:168)
com.objectdb.o.ERR.f(ERR.java:66)
com.objectdb.o.OBC.onObjectDBError(OBC.java:1560)
com.objectdb.jpa.JpaQuery.getResultList(JpaQuery.java:728)
com.professionalVerdict.model.User.search(User.java:99)
com.professionalVerdict.servlet.SearchServlet.doPost(SearchServlet.java:53)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
</pre>
<pre>java.lang.NullPointerException
com.objectdb.o.EXR$e.c(EXR.java:190)
com.objectdb.o.VAR.aB(VAR.java:887)
com.objectdb.o.VAR.aA(VAR.java:830)
com.objectdb.o.BCN.o(BCN.java:305)
com.objectdb.jpa.JpaQuery.getResultList(JpaQuery.java:719)
com.professionalVerdict.model.User.search(User.java:99)
com.professionalVerdict.servlet.SearchServlet.doPost(SearchServlet.java:53)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
</pre>
有人能帮我找到解决方案吗?您使用的是哪个版本的ObjectDB?您可以通过在ObjectDB浏览器中运行查询来重现异常吗?我认为这不是JPQL问题。我建议您将问题的标题也改为与ObjectDB相关的内容,以吸引真正能够帮助您的人。
public static List<User_personal> search(String str,EntityManager em) {
Query q = em.createQuery("SELECT u FROM User_personal u WHERE lower(CONCAT(u.fname,u.lname)) LIKE lower(:name) ORDER BY LOCATE(CONCAT(u.fname,u.lname),lower(:given)), LENGTH(CONCAT(u.fname,u.lname))", User_personal.class);
q.setParameter("given",str);
q.setParameter("name", "%"+str+"%");
@SuppressWarnings("unchecked")
List<User_personal> result = q.getResultList();
if (!result.isEmpty()) {
return result;
}
return null;
}
<pre>com.objectdb.o.InternalException: Unexpected internal exception
com.objectdb.o.JPE.h(JPE.java:168)
com.objectdb.o.ERR.f(ERR.java:66)
com.objectdb.o.OBC.onObjectDBError(OBC.java:1560)
com.objectdb.jpa.JpaQuery.getResultList(JpaQuery.java:728)
com.professionalVerdict.model.User.search(User.java:99)
com.professionalVerdict.servlet.SearchServlet.doPost(SearchServlet.java:53)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
</pre>
<pre>java.lang.NullPointerException
com.objectdb.o.EXR$e.c(EXR.java:190)
com.objectdb.o.VAR.aB(VAR.java:887)
com.objectdb.o.VAR.aA(VAR.java:830)
com.objectdb.o.BCN.o(BCN.java:305)
com.objectdb.jpa.JpaQuery.getResultList(JpaQuery.java:719)
com.professionalVerdict.model.User.search(User.java:99)
com.professionalVerdict.servlet.SearchServlet.doPost(SearchServlet.java:53)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
</pre>