У меня такой запрос:
SELECT sender, sum(size) AS size,COUNT(*) AS count FROM inmail
WHERE ( date > '2011.06.01' AND w.l_date < '2011.06.10' )
GROUP BY sender ORDER BY count DESC;
и соответствующий ему класс сущности:
@Entity
@Stateless
@Cacheable(false)
@Cache(type = CacheType.NONE,alwaysRefresh=true, shared=false, expiry=1, size=0)
@SqlResultSetMappings({
@SqlResultSetMapping(name = "ReportsResultMapping",
entities = {
@EntityResult(entityClass = ReportsResultMap.class,
fields = {
@FieldResult(name = "sender", column = "sender"),
@FieldResult(name = "size", column = "size"),
@FieldResult(name = "count", column = "count")
})})
})
public class ReportsResultMap implements Serializable {
@Id
protected String sender;
protected BigDecimal size;
protected BigDecimal count;
...
}
Здесь возникает проблема: строка отправителя в моей таблице иногда равна нулю, а запрос возвращает что-то вроде этого:
sender size count
------------------+------------+------------
| 3743040708 | 69
Phrase1 | 1332377 | 13
Phrase2 | 0 | 1
Phrase3 | 0 | 1
это вызывает проблему в моем отображении EJB, поскольку поле отправителя определено как @Id, и в результате сервер выдает исключение нулевого указателя (говоря, что поле идентификатора не может быть пустым).
Я почти уверен, что это может быть общая проблема, но я не знаю, как сформулировать эту проблему, чтобы погуглить ее. У кого-нибудь есть решение или решение для этой проблемы? Я пытался определить размер как @Id, но я знаю, что это не очень хорошее решение.
Спасибо заранее.