使用hibernate@NamedNativeQuery返回数值

使用hibernate@NamedNativeQuery返回数值,hibernate,jpa,Hibernate,Jpa,我有一个问题: “…如果查询只返回一个数字(即,查询类似于‘select count(id)where…),我遇到了这个错误 org.hibernate.cfg.NotYetImplementedException:尚不支持纯本机标量查询“ 有关更多详细信息,请参阅: 我不想有一个包装类,尤其是不想有一些额外的表。正确的方法是什么?我使用createQuery()做了一个变通: 面临“纯本机标量查询尚不受支持”。我需要以查询的名称作为参数运行count查询,并且其中一个查询必须是本机SQL。 能

我有一个问题:

“…如果查询只返回一个数字(即,查询类似于‘select count(id)where…),我遇到了这个错误

org.hibernate.cfg.NotYetImplementedException:尚不支持纯本机标量查询“

有关更多详细信息,请参阅:


我不想有一个包装类,尤其是不想有一些额外的表。正确的方法是什么?

我使用createQuery()做了一个变通:

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

学分转到:

您实际上可以通过以下方式完成此操作:

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


// execute like this:
((BigInteger) manager.createNamedQuery("countAll").getSingleResult()).intValue();

至少花点时间将问题粘贴到这里,而不是链接到另一个站点。在这种情况下,它似乎是多余的。在我的情况下,它是
java.math.BigDecimal