3

私はこの質問をしました:

「... クエリが数値を返すだけの場合 (つまり、クエリが 'select count(id) where…..) のようなものである場合、このエラーに遭遇しました。

org.hibernate.cfg.NotYetImplementedException: 純粋なネイティブ スカラー クエリはまだサポートされていません"

詳細については、http: //atechnicaljourney.wordpress.com/2012/09/30/hibernate-pure-native-scalar-queries-are-not-yet-supported/を参照してください。

私はラッパークラスを持ちたくありません。特に、余分なテーブルは持ちたくありません。これを行う適切な方法は何ですか?

4

3 に答える 3

6

「純粋なネイティブ スカラー クエリはまだサポートされていません」という問題に直面しました。パラメータとしてクエリの名前を持つ count クエリを実行する必要があり、クエリの 1 つはネイティブ SQL でなければなりません。偽のエンティティを作成することで克服できました:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

/**
 * Simple wrapper entity work around for the limited hibernate pure native query
 * support. Where an HQL query is not possible
 */
@SuppressWarnings("serial")
@Entity
public class CountDTO  extends Number {

    @Id
    @Column(name = "COUNT")
    private Long count;

    @Override
    public double doubleValue() {
        return count.doubleValue();
    }

    @Override
    public float floatValue() {
        return count.floatValue();
    }

    @Override
    public int intValue() {
        return count.intValue();
    }

    @Override
    public long longValue() {
        return count.longValue();
    }

}

それから私は設定しましたresultClass = CountDTO.class

@NamedNativeQueries({
    @NamedNativeQuery (name="postIdSecurity",
            query="select count(...) ...", resultClass = CountDTO.class)
})

そしてカウントを取得します:

    ((Number) getEntityManager().createNamedQuery(qryName).
setParameter(...).getSingleResult()).longValue()

クレジット: http://jdevelopment.nl/hibernates-pure-native-scalar-queries-supported/#comment-1533

于 2012-12-26T15:36:18.737 に答える
2

代わりに createQuery() を使用して回避しました: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/objectstate.html#objectstate-querying

于 2012-11-08T09:58:13.267 に答える