Как определить нули для поля @Id в Resultsetmapping? - PullRequest
0 голосов
/ 13 августа 2011

У меня такой запрос:

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, но я знаю, что это не очень хорошее решение.

Спасибо заранее.

...