Dúvida Set.add - Set com mais de 190 000 linhas

3 respostas
antonioedirane

Tenho a seguinte classe:

@Entity
public class Twitter implements Serializable {

    @Id
    private String username;
    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    private Set<TwitterPost> posts;
   /**
     * @return the username
     */
    public String getUsername() {
        return username;
    }

    /**
     * @param username the username to set
     */
    public void setUsername(String username) {
        this.username = username;
    }

    public void adicionar(TwitterPost post) {
        if (posts==null) {
            posts = new HashSet<TwitterPost>();
        }
        posts.add(post);
    }

Neste método adicionar estou com uma dúvida.
pois uma entidade dessas tem um set de posts com mais de 190.000 posts.
Desta forma que a entidade esta anotada,
quando eu acesso o método adicionar o hibernate popula esse set de posts com 190.00 posts,
pra depois adicionar um novo post ?

Pois estou recebendo out of memory error direto na minha aplicação web.
Se isso estiver acontecendo como posso arrumar isto ?
Pois esta lista tende a crescer mais ainda.

3 Respostas

webdouglas

Não sou um expert em Hibernate, porém não imagino que o uso do mesmo para esse cenario seja o ideal.

Para preencher o Set de dados a melhor solução é ter um mecanismo de paginação, ou seja, para a lista voce faria a busca de forma diferente, SEM ser pelo mapeamento(@OneToMany).

vamos esperar se alguem pode ajudar melhor… ok?

antonioedirane

Valeu pela ajuda, vamos ver se algum expert em Hibernate pode indicar uma solução melhor.

douglaspaulino:
Não sou um expert em Hibernate, porém não imagino que o uso do mesmo para esse cenario seja o ideal.

Para preencher o Set de dados a melhor solução é ter um mecanismo de paginação, ou seja, para a lista voce faria a busca de forma diferente, SEM ser pelo mapeamento(@OneToMany).

vamos esperar se alguem pode ajudar melhor… ok?

webdouglas

ok, mais adiantando algo, pode ser uma questão de de mapeamento bidirecional… concordo que com 190k de registros as chances são grandes de dar um outofmemory… porem pode-se otimizar de alguma maneira retirando a referencia contrária do mapeamento.

Verifique o mapemento existentes dentro da classe “TwitterPost”, só de voce ter a referencia contraria para o objeto “Twitter” já é um grande uso de memoria, pois este objeto ja teria referencia para outra lista de objetos “TwitterPost” e assim por diante… é bom tomar cuidado e os cascades tb.

espero ter entendido…rsrsrsrs

antonioedirane:
Valeu pela ajuda, vamos ver se algum expert em Hibernate pode indicar uma solução melhor.

douglaspaulino:
Não sou um expert em Hibernate, porém não imagino que o uso do mesmo para esse cenario seja o ideal.

Para preencher o Set de dados a melhor solução é ter um mecanismo de paginação, ou seja, para a lista voce faria a busca de forma diferente, SEM ser pelo mapeamento(@OneToMany).

vamos esperar se alguem pode ajudar melhor… ok?

Criado 3 de agosto de 2010
Ultima resposta 3 de ago. de 2010
Respostas 3
Participantes 2