我有这样的查询:
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类是:
@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映射出现问题,因为sender字段定义为@Id,结果服务器抛出空指针异常(说ID字段不能为null)。
我很确定这可能是一个普遍的问题,但我不知道如何将这个问题说成谷歌。有没有人对此问题有解决方案或解决方法?我试图将大小定义为@Id,但我知道这不是一个好的解决方案。
提前致谢。