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

面临“尚不支持纯本机标量查询”。我需要运行以查询名称作为参数的计数查询,其中一个查询必须是本机 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 回答
3

您实际上可以通过以下方式执行此操作:

@NamedNativeQueries({
        @NamedNativeQuery(
                name = "countAll",
                query = "select count(*) from MyTable"
        )
})
public class MyTable ...


// execute like this:
((BigInteger) manager.createNamedQuery("countAll").getSingleResult()).intValue();
于 2018-03-26T10:31:47.983 回答
2

我做了一个使用 createQuery() 的工作:http: //docs.jboss.org/hibernate/core/3.6/reference/en-US/html/objectstate.html#objectstate-querying

于 2012-11-08T09:58:13.267 回答