Reputation: 5884
I've this question:
"... if the query just returns a number (i.e., the query is something like ‘select count(id) where…..) I came up against this error
org.hibernate.cfg.NotYetImplementedException: Pure native scalar queries are not yet supported"
For more details see: http://atechnicaljourney.wordpress.com/2012/09/30/hibernate-pure-native-scalar-queries-are-not-yet-supported/
I don't want to have a wrapper class and especially not some extra table. What is the proper way of doing this?
Upvotes: 3
Views: 10846
Reputation: 3777
You can actually do this the following way:
@NamedNativeQueries({
@NamedNativeQuery(
name = "countAll",
query = "select count(*) from MyTable"
)
})
public class MyTable ...
// execute like this:
((BigInteger) manager.createNamedQuery("countAll").getSingleResult()).intValue();
Upvotes: 3
Reputation: 918
Faced "Pure native scalar queries are not yet supported". I need to run count queries having a name of the query as parameter and one of the queries must be native SQL. Was able to overcome by creating fake entity:
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();
}
}
Then I set resultClass = CountDTO.class
@NamedNativeQueries({
@NamedNativeQuery (name="postIdSecurity",
query="select count(...) ...", resultClass = CountDTO.class)
})
And get count:
((Number) getEntityManager().createNamedQuery(qryName).
setParameter(...).getSingleResult()).longValue()
Credits go to: http://jdevelopment.nl/hibernates-pure-native-scalar-queries-supported/#comment-1533
Upvotes: 6
Reputation: 5884
I did a work around using createQuery() instead: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/objectstate.html#objectstate-querying
Upvotes: 2