[ https://issues.apache.org/jira/browse/OPENJPA-2553?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Apache Fan updated OPENJPA-2553: -------------------------------- Description: The following JPQL query is executed to get the average of values stored in a Map. {noformat} @NamedQueries({ @NamedQuery(name = "selectFromMap", query = "SELECT new dao.entity.AggregationResultHolder(AVG(p), KEY(p)) FROM Evaluation e, IN (e.scores) p " + "WHERE e.subject.id=:subjectId GROUP BY KEY(p)") }) {noformat} Entity: {noformat} public class Evaluation { ... @ElementCollection @MapKeyColumn(name = "criteria_id") @Column(name = "criteria_score") private Map<Criteria, Integer> scores = new HashMap<Criteria, Integer>(); ... } {noformat} - *Expected behaviour:* the AVG value is returned as *Double* (according to http://openjpa.apache.org/builds/2.3.0/apache-openjpa/docs/jpa_langref.html#jpa_langref_aggregates ) - *Experienced behaviour:* the average is returned as *Integer* (and exception is thrown if the AggregationResultHolder class' constructor is not Integer-based). Unfortunately this way the fraction digits are lost. *Workaround:* after modifying the Map to <Criteria, Double> in the entity, the query returns Doubles for the average (however the fraction digits are still lost in case of HSQLDB). Obviously it is a sub-optimal solution, as the schema has to be changed. was: The following JPQL query is executed to get the average of values stored in a Map. {noformat} @NamedQueries({ @NamedQuery(name = "selectFromMap", query = "SELECT new dao.entity.AggregationResultHolder(AVG(p), KEY(p)) FROM Evaluation e, IN (e.scores) p " + "WHERE e.subject.id=:subjectId GROUP BY KEY(p)") }) {noformat} Entity: {noformat} public class Evaluation { ... @ElementCollection @MapKeyColumn(name = "criteria_id") @Column(name = "criteria_score") private Map<Criteria, Integer> scores = new HashMap<Criteria, Integer>(); ... } {noformat} - *Expected behaviour:* the AVG value is returned as Double (according to http://openjpa.apache.org/builds/2.3.0/apache-openjpa/docs/jpa_langref.html#jpa_langref_aggregates ) - *Experienced behaviour:* the average is returned as Integer (and exception is thrown if the AggregationResultHolder class' constructor is not Integer-based). Unfortunately this way the fraction digits are lost. *Workaround:* after modifying the Map to <Criteria, Double> in the entity, the query returns Doubles for the average (however the fraction digits are still lost in case of HSQLDB). Obviously it is a sub-optimal solution, as the schema has to be changed. > JPQL AVG returns Int instead of Double wrt. @ElementCollection > -------------------------------------------------------------- > > Key: OPENJPA-2553 > URL: https://issues.apache.org/jira/browse/OPENJPA-2553 > Project: OpenJPA > Issue Type: Bug > Components: query > Affects Versions: 2.4.0 > Environment: Apache Tomee plus 1.7.1, > openjpa-2.4.0-nonfinal-1598334.jar, hsqldb-2.3.2, H2DB-2014-12-19 > Reporter: Apache Fan > > The following JPQL query is executed to get the average of values stored in a > Map. > {noformat} > @NamedQueries({ > @NamedQuery(name = "selectFromMap", > query = "SELECT new dao.entity.AggregationResultHolder(AVG(p), KEY(p)) > FROM Evaluation e, IN (e.scores) p " > + "WHERE e.subject.id=:subjectId GROUP BY KEY(p)") > }) > {noformat} > Entity: > {noformat} > public class Evaluation { > ... > @ElementCollection > @MapKeyColumn(name = "criteria_id") > @Column(name = "criteria_score") > private Map<Criteria, Integer> scores = new HashMap<Criteria, Integer>(); > ... > } > {noformat} > - *Expected behaviour:* the AVG value is returned as *Double* (according to > http://openjpa.apache.org/builds/2.3.0/apache-openjpa/docs/jpa_langref.html#jpa_langref_aggregates > ) > - *Experienced behaviour:* the average is returned as *Integer* (and > exception is thrown if the AggregationResultHolder class' constructor is not > Integer-based). Unfortunately this way the fraction digits are lost. > *Workaround:* after modifying the Map to <Criteria, Double> in the entity, > the query returns Doubles for the average (however the fraction digits are > still lost in case of HSQLDB). Obviously it is a sub-optimal solution, as the > schema has to be changed. > -- This message was sent by Atlassian JIRA (v6.3.4#6332)