如何在Resultsetmapping中为@Id字段定义空值?

时间:2011-08-13 08:52:47

标签: java ejb-3.0 resultset

我有这样的查询:

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,但我知道这不是一个好的解决方案。

提前致谢。

0 个答案:

没有答案