0

テーブルから 1 列だけを返したい。これは私のDAOです:

@SuppressWarnings("unchecked")
    public String getUri() {

        return sessionFactory.getCurrentSession()
                .createQuery("uri from Templates WHERE state=1").toString();
    }

Uri は列です。ドメイン:

    public String getUri() {
        return uri;
    }

    public void setUri(String uri) {
        this.uri = uri;
    }

コンソールは次のように述べています。

 Request processing failed; nested exception is java.lang.IllegalArgumentException: node to traverse cannot be null!

2 番目のバージョン:

@SuppressWarnings("unchecked")
    public String getUri() {

        return (String) sessionFactory.getCurrentSession()
                .createQuery("select uri from TEMPLATES WHERE state=1")
                .uniqueResult();
    }

コンソール:

Request processing failed; nested exception is org.hibernate.hql.ast.QuerySyntaxException: TEMPLATES is not mapped [select uri from TEMPLATES WHERE state=1]
4

3 に答える 3

1

SELECT 句がありません:

@SuppressWarnings("unchecked")
    public String getUri() {

        Query q = sessionFactory.getCurrentSession()
                .createQuery("SELECT uri FROM Templates WHERE state=1");

        List l = q.list();

        //guess you know there's only one result?
        return l.get(0).toString();
    }

詳細: https://forum.hibernate.org/viewtopic.php?p=2448422

于 2013-08-08T14:40:22.770 に答える
0

あなたが追加したように、あなたのメソッドをselect呼び出します。最初の結果だけを取得したい場合は、リストから最初の結果を取得します。listQuery

于 2013-08-08T14:42:02.177 に答える
0

テーブル/列名ではなく、クラス/フィールド名を使用する必要があります。また、クエリはそのテーブルのクラスのインスタンスのリストではなく、配列を返します。また、selectクエリに a を入力します。例外は、hqlが壊れていることを意味すると思います。

于 2013-08-08T13:52:00.567 に答える