0

最近、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 構文の例外に関連する何かが表示され、"select id2_1,uj8_,5sd_11 from tb_2_1..." の近くに構文エラーがあることがわかります。

HQL の代わりに SQLQuery を作成すると、完全に機能しますが、単一のプロセスごとにこれを行う必要があるため、これを行うのは便利ではありません。これは面倒であり、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>

それ以外の:

<c:forEach items="${procesosSistema}" var="proceso">
                <tr onmouseover="this.style.backgroundColor='#ffff66';"
            onmouseout="this.style.backgroundColor='#d4e3e5';">
                    <td><c:out value="${proceso.id}"/></td>
                    <td><c:out value="${proceso.nombre}"/></td>
                    <td><c:out value="${proceso.descripcion}"/></td>
                     ...
                    <td></td>
                </tr>
            </c:forEach>

プロパティ「show_sql」を設定すると、上記のような奇妙なクエリが表示されます。

"select id2_1,uj8_,5sd_11 from SGDP-mysql123.tb_2_1.... tb0"

誰かが私を助けてくれたら、本当に感謝しています。

前もって感謝します。

4

3 に答える 3

1

ここで疑問があります、あなたが言及しました

String hbQuery = "from TableProcess";

あなたの "TableProcess" クラスは hbm.xml ファイルにテーブルとのマッピングがありますか?

また、2 番目のクエリのように内部結合を使用している場合、そのようなマッピングはありません。このようにのみ使用する必要があります。

于 2013-07-10T15:51:55.827 に答える
0

この質問に答えてくれた皆さん、こんにちは。コードの問題ではなく、テーブルと列の名前に問題がありました。それらのほとんどに文字 " " が含まれているため、Hibernate がクエリを生成するときに "つまり、列の 1 つは process_id と frequence_number と呼ばれていましたが、その文字は許可されていないため、processId と frequenceNumber で置き換える必要がありました (私は' Hibernate がそれをエンコーディングなどの一部と見なしているためか、理由がわからない.私がする必要があったのは、前述のように、これを解決した後、「_」を使用しないようにテーブルと列の名前を修正することです。 、すべてのデータベース マッピングを再生成し、新しいものの名前を変更する必要がありました. その後、完全に機能しました.この問題が同じ問題を抱えている人に役立つことを願っています.

確かに私は試してみましたが、同様のシナリオで役立つかもしれません。

于 2013-07-11T21:24:01.947 に答える