【问题标题】:Convert MySQL query to Entity Manager query in Java将 MySQL 查询转换为 Java 中的 Entity Manager 查询
【发布时间】:2014-05-14 10:10:24
【问题描述】:

我在 MySQL 中创建了这个查询,它正在做我需要它做的事情

SELECT a.* , b.nazivServisa, c.naziv, d.prezime, d.ime, e.nazivUloge
FROM nalog a , servis b, organ c, zaposleni d ,uloga e
WHERE a.servis_id = b.servis_id and a.zaposleni_id like d.zaposleni_id and
a.organ_id like c.organ_id and a.uloga_id like e.uloga_id
ORDER by b.nazivServisa, c.naziv, d.prezime, d.ime, e.nazivUloge ASC

但是,我怎样才能将其转换为:

Query q = em.createQuery("SELECT x FROM " + entityType.getSimpleName()
            + " x ORDER BY x.naziv");

提前致谢! 编辑:我真的不需要它来检索 entityType.getSimpleName(),因为我知道我想访问哪个表,我只是遇到了语法问题。

String queryString = "SELECT a , b.nazivServisa, c.naziv, d.prezime, d.ime, e.nazivUloge "
            + " FROM nalog a , servis b, organ c, zaposleni d ,uloga e "
            + " WHERE a.servis_id = b.servis_id and a.zaposleni_id like d.zaposleni_id and "
            + " a.organ_id like c.organ_id and a.uloga_id like e.uloga_id "
            + " ORDER by b.nazivServisa, c.naziv, d.prezime, d.ime, e.nazivUloge ASC";

这看起来可行,但我得到了:

javax.ejb.EJBException: The bean encountered a non-application exception; nested          exception is: 
<openjpa-2.2.0-r422266:1244990 nonfatal user error>     org.apache.openjpa.persistence.ArgumentException: "Encountered "a . zaposleni_id like d" at         character 161, but expected: ["(", "*", "+", "-", ".", "/", ":", "<", "<=", "<>", "=", ">",     ">=", "?", "ABS", "ALL", "AND", "ANY", "AS", "ASC", "AVG", "BETWEEN", "BOTH", "BY",     "CONCAT", "COUNT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "DELETE", "DESC",     "DISTINCT", "EMPTY", "ESCAPE", "EXISTS", "FETCH", "FROM", "GROUP", "HAVING", "IN", "INNER",     "IS", "JOIN", "LEADING", "LEFT", "LENGTH", "LIKE", "LOCATE", "LOWER", "MAX", "MEMBER",     "MIN", "MOD", "NEW", "NOT", "NULL", "OBJECT", "OF", "OR", "ORDER", "OUTER", "SELECT",     "SET", "SIZE", "SOME", "SQRT", "SUBSTRING", "SUM", "TRAILING", "TRIM", "TYPE", "UPDATE",     "UPPER", "WHERE", <DATE_LITERAL>, <DECIMAL_LITERAL>, <IDENTIFIER>, <INTEGER_LITERAL>,     <STRING_LITERAL2>, <STRING_LITERAL>, <TIMESTAMP_LITERAL>, <TIME_LITERAL>]." while parsing     JPQL "SELECT a , b.nazivServisa, c.naziv, d.prezime, d.ime, e.nazivUloge  FROM nalog a ,     servis b, organ c, zaposleni d ,uloga e  WHERE a.servis_id = b.servis_id and a.zaposleni_id     like d.zaposleni_id and  a.organ_id like c.organ_id and a.uloga_id like e.uloga_id  ORDER     by b.nazivServisa, c.naziv, d.prezime, d.ime, e.nazivUloge ASC". See nested stack trace for     original parse error.:

                org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:363)

            org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:283)

        com.sun.proxy.$Proxy211.findAllNalozi(Unknown Source)

        server.servlet.ReadControllerNalog.doGet(ReadControllerNalog.java:29)

        javax.servlet.http.HttpServlet.service(HttpServlet.java:621)

        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

        org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)

        org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

        org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)

        org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)

        org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)

        org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)

        org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)

        org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)

        org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)

        org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)

        org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)

        org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)

        org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)

        java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

        java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

        java.lang.Thread.run(Thread.java:744)

已解决!

Query q = em.createQuery("SELECT a"
            + " FROM "+entityType.getSimpleName()+" a , Servis b, Organ c, Zaposleni d ,Uloga e "
            + " WHERE a.servis.id = b.id and a.zaposleni.id = d.id and "
            + " a.organ.id = c.id and a.uloga.id = e.id "
            + " ORDER by b.nazivServisa, c.naziv, d.prezime, d.ime, e.nazivUloge ASC ");

【问题讨论】:

标签: java mysql sql entitymanager


【解决方案1】:
String jpql = "select a, b.nazivServisa, c.naziv, d.prezime, d.ime, e.nazivUloge from " + 
    entityA.getSimpleName() + " a, " + entityB.getSimpleName() + " b, " + entityC.getSimpleName() + " c, " + 
    entityD.getSimpleName() + " d, " + entityE.getSimpleName() + " e where a.servis_id = b.servis_id " +
    "and a.zaposleni_id like d.zaposleni_id and a.organ_id like c.organ_id and a.uloga_id like e.uloga_id " +
    "ORDER by b.nazivServisa, c.naziv, d.prezime, d.ime, e.nazivUloge ASC";
Query q = em.createQuery(jpql, Object[]);

【讨论】:

    【解决方案2】:

    尝试:

    public EntityManager em;
    String queryString = "SELECT a , b.nazivServisa, c.naziv, d.prezime, d.ime, e.nazivUloge "
            + " FROM nalog a , servis b, organ c, zaposleni d ,uloga e "
            + " WHERE a.servis_id = b.servis_id and a.zaposleni_id like d.zaposleni_id and "
            + " a.organ_id like c.organ_id and a.uloga_id like e.uloga_id "
            + " ORDER by b.nazivServisa, c.naziv, d.prezime, d.ime, e.nazivUloge ASC";
    // Create the query
    Query q = em.createQuery(queryString);
    // Get the list
    List list = q.getResultList();
    

    【讨论】:

      猜你喜欢
      • 2019-07-29
      • 2018-11-01
      • 2013-07-10
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多