Проблема с фильтрацией коллекции в спящем режиме - PullRequest
2 голосов
/ 11 декабря 2010

У меня есть следующие структуры данных:

@Entity
@FilterDef(name="usageHistoryFilter", parameters=@ParamDef( name="updateDate", type="date" ))
@Table(name = "Services")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Service extends DBEntity {
    private Set<UsageHistory> usageHistorySet;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "ServiceUsageHistory", joinColumns = @JoinColumn(name = "service_id"), inverseJoinColumns = @JoinColumn(name = "usageHistory_id"))
    @Filter(name = "usageHistoryFilter", condition="NEEDED_CONDITION")
    public Set<UsageHistory> getUsageHistorySet() {
        return usageHistorySet;
    }

    ...
}

@Entity
@Table(name = "UsageHistorys")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class UsageHistory extends DBEntity {
    private Date lastUpdateDate;
    private AgentDetails agentDetails;

    @Column(name = "updateDate")
    public Date getLastUpdateDate() {
        return lastUpdateDate;
    }

    @ManyToOne
    public AgentDetails getAgentDetails() {
        return agentDetails;
    }

    ...
}

@Entity     
@Table(name = "AgentDetails")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class AgentDetails extends DBEntity {
    private boolean local;

    @Column(name = "local")
    public boolean isLocal() {
        return local;
    }
}

Я пытался реализовать запрос, который будет получать все службы, обновленные после указанной даты, и это довольно легко сделать.Следующая часть: набор UseHistory в извлеченных сервисах должен содержать только объекты ObjectHistory, которые были обновлены после указанной даты, а их объекты agentsDetails имеют свойство 'local' со значением 'true'.

После некоторого поиска в Google я обнаружил, чтодолжно быть выполнимо с использованием фильтров.И тут возникает моя проблема, я попытался написать условие фильтра самостоятельно, но мой недостаток знаний слишком велик.Я не знаю, возможно ли вообще создать условие, которое будет учитывать все мои требования.

Можете ли вы помочь мне с этим или укажете другой способ добиться этого?

Я упомяну этобаза данных будет содержать тысячи сервисов, каждый из которых содержит миллионы объектов History.

...