Java Hibernate会话.createQuery(来自TableProcess.list())出现问题;不起作用

Java Hibernate会话.createQuery(来自TableProcess.list())出现问题;不起作用,java,sql,spring,hibernate,spring-mvc,Java,Sql,Spring,Hibernate,Spring Mvc,我最近一直在使用Netbeans和MySQL创建Spring+Hibernate应用程序,但在我的代码块中遇到了一些问题: public List listSystemProcess() { List procesosSistema = null; String hbQuery = "from TableProcess"; try { Session hbSesion = HibernatePersistenceHandl

我最近一直在使用Netbeans和MySQL创建Spring+Hibernate应用程序,但在我的代码块中遇到了一些问题:

public List listSystemProcess() {
        List procesosSistema = null;
        String hbQuery = "from TableProcess";

        try {
            Session hbSesion = HibernatePersistenceHandler.getSessionFactory().openSession();
            Transaction tx = hbSesion.beginTransaction();
            Query query = hbSesion.createQuery(hbQuery);
            procesosSistema = query.list();
            tx.commit();
            hbSesion.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return procesosSistema;
    }
这根本不起作用,我得到了一些与SQL语法异常相关的信息,告诉我在“从tb_2_1中选择id2_1、uj8_、5sd_11…”附近有一个语法错误

如果我创建一个SQLQuery而不是HQL查询,它工作得很好,但我觉得这样做没有什么用处,因为我应该为每个进程都这样做,这很乏味,而且几乎与使用JDBC相同

这项工作:

String hbQuery = "select p.id,p.nombre,p.descripcion,p.frecuencia_uso,t.nombre "
        + "from tb_proceso_sistema p inner join tb_tipo_proceso t "
        + "on p.tb_tipo_proceso_id = t.id";
    Query query = hbSesion.createSQLQuery(hbQuery);
但当我也这样做时,我的jsp也会发生一些变化:

<c:forEach items="${procesosSistema}" var="proceso">
                <tr onmouseover="this.style.backgroundColor='#ffff66';"
            onmouseout="this.style.backgroundColor='#d4e3e5';">
                    <td><c:out value="${proceso[0]}"/></td>
                    <td><c:out value="${proceso[1]}"/></td>
                    <td><c:out value="${proceso[2]}"/></td>
                    <td><c:out value="${proceso[3]}"/></td>
                    <td><c:out value="${proceso[4]}"/></td>
                    <td></td>
                </tr>
            </c:forEach>
如果有人能帮助我,我将非常感激


提前谢谢。

你提到的,我这里有个疑问

字符串hbQuery=“fromtableprocess”

您的“TableProcess”类是否在hbm.xml文件中与表有映射

如果您在第二个查询中使用的是内部联接,那么就不可能有这样的映射,您只能这样使用它。

如果“TableProcess”类在hbm.xml中有映射,并且在数据库中有exist表,请尝试以下代码:

public List listSystemProcess() {
    List<TableProcess> procesosSistema = null;
    String hbQuery = "SELECT p FROM TableProcess p";

    Session hbSesion = null;
    try {
        Session hbSesion =HibernatePersistenceHandler.getSessionFactory().openSession();
        Query query = hbSesion.createQuery(hbQuery);
        procesosSistema = query.list();

    } catch (Exception e) {
        e.printStackTrace(System.err);
    } finaly{
        hbSesion.close();
    }

    return procesosSistema;
}
公共列表listSystemProcess(){
List PROCESSISTEMA=null;
String hbQuery=“从TableProcess p中选择p”;
会话hbSesion=null;
试一试{
会话hbSesion=HibernatePersistenceHandler.getSessionFactory().openSession();
Query Query=hbSesion.createQuery(hbQuery);
processistema=query.list();
}捕获(例外e){
e、 printStackTrace(System.err);
}最后{
hbSesion.close();
}
返回过程助手;
}

大家好,回答这个问题的人都好,但这不是代码的问题,而是表和列的名称的问题,因为其中大多数都包含字符“”,当Hibernate生成查询时,它使用“”作为其“编码”或“查询过程”的字符。我的意思是,其中一列名为process_id和frequency_number,但由于该字符不被允许,我需要将其替换为processId和frequenceNumber(我不知道为什么,可能是因为Hibernate将其视为其编码的一部分或类似内容)。正如我所提到的,我需要做的是修复表和列的名称,以避免使用“\u”。解决这个问题后,我需要重新生成所有数据库映射,并更改新映射的名称。然后它工作得很好,希望这个问题能帮助有同样问题的人

谢谢大家的回答,当然我试过了,也许在类似的情况下它们会有用

"select id2_1,uj8_,5sd_11 from SGDP-mysql123.tb_2_1.... tb0"
public List listSystemProcess() {
    List<TableProcess> procesosSistema = null;
    String hbQuery = "SELECT p FROM TableProcess p";

    Session hbSesion = null;
    try {
        Session hbSesion =HibernatePersistenceHandler.getSessionFactory().openSession();
        Query query = hbSesion.createQuery(hbQuery);
        procesosSistema = query.list();

    } catch (Exception e) {
        e.printStackTrace(System.err);
    } finaly{
        hbSesion.close();
    }

    return procesosSistema;
}