我有这个问题:
“...如果查询只返回一个数字(即查询类似'select count(id)where ......)我遇到了这个错误
org.hibernate.cfg.NotYetImplementedException:尚不支持纯本机标量查询“
我不想拥有一个包装类,尤其不是一些额外的表。这样做的正确方法是什么?
答案 0 :(得分: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
答案 1 :(得分:2)
我做了一个使用createQuery()的工作: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/objectstate.html#objectstate-querying
答案 2 :(得分:1)
您实际上可以通过以下方式执行此操作:
@NamedNativeQueries({
@NamedNativeQuery(
name = "countAll",
query = "select count(*) from MyTable"
)
})
public class MyTable ...
// execute like this:
((BigInteger) manager.createNamedQuery("countAll").getSingleResult()).intValue();
答案 3 :(得分:-1)
正确的方法?如果你真的想在那里为Hibernate提供支持,否则只需使用支持它的JPA实现(例如DataNucleus JPA,其他人也应该支持它)。