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