Fórum Relacionamento OneToMany pesado ou não ? #492269
15/09/2014
0
< br />
Porém quando estava "debugando" reparei que existe o mesmo objeto sendo referenciado várias vezes de maneira redundante.
< br />
Vou colocar um exemplo:
//Classe pai
public class FinPendencia4 implements Serializable {
//Relacionamento 1
@OneToMany(cascade = CascadeType.ALL, mappedBy = "idfkpendencia6")
private List<FinPendenciaBaixaItens6> finPendenciaBaixaItens6List;
//Relacionamento 2
@OneToMany(cascade = CascadeType.ALL, mappedBy = "finPendencia4")
private List<FinPendenciaItens11> finPendenciaItens11List;
}
//Classe filha 1
public class FinPendenciaBaixaItens6 implements Serializable {
@JoinColumn(name = "idfkpendencia6", referencedColumnName = "idcodigo4")
@ManyToOne(optional = false, cascade = {CascadeType.DETACH, CascadeType.REFRESH})
private FinPendencia4 idfkpendencia6;
}
//Classe filha 2
public class FinPendenciaItens11 implements Serializable {
@JoinColumn(name = "idfkpendencia11", referencedColumnName = "idcodigo4")
@ManyToOne(optional = false, cascade = {CascadeType.DETACH, CascadeType.REFRESH})
private FinPendencia4 finPendencia4;
}
//Recuperando do banco de dados
FinPendencia4 pendencia = (new pendenciaDao).get(1);
//
Supondo que cada lista de classes filha contenha 5 objetos cada uma respectivamente
Quando recupero do banco de dados um objeto da classe pai "FinPendencia4".
Notei que cada item da lista das classes filhas contem um objeto referenciando a classe pai.
Minha duvida é se esta referencia gasta memória ou pode causar perda de desempenho.
Desde Obrigado pela atenção.
Fernando Silva
Curtir tópico
+ 0Post mais votado
16/09/2014
Ronaldo Lanhellas
Gostei + 1
Mais Posts
16/09/2014
Ronaldo Lanhellas
Há sim uma perda de desempenho se compararmos a uma aplicação mais procedural que só utiliza SQL e não trabalha com objetos, MAS creio que a perda seja compensada no nível de estruturação e organização que o JPA lhe proprociona. Ainda mais porque Java é interpretada.
Gostei + 0
16/09/2014
Fernando Silva
Há sim uma perda de desempenho se compararmos a uma aplicação mais procedural que só utiliza SQL e não trabalha com objetos, MAS creio que a perda seja compensada no nível de estruturação e organização que o JPA lhe proprociona. Ainda mais porque Java é interpretada.
Primeiro obrigado, pela atenção.
Então, o SQL, eu coloquei pra gerar log e o mesmo, esta correto, porem meu medo é o seguinte.
Seguindo o exemplo que dei seria algo similar ao exemplo que vou postar agora, ou seja varias referencias ao mesmo Objeto:
Então pra resumir estas referencias consomem memória?
//Considerando que cada lista tenha 5 objetos o que ocorre é isto. FinPendencia4 pendencia = (new pendenciaDao).get(1); FinPendencia4 pendencia1 = pendencia; FinPendencia4 pendencia2 = pendencia; FinPendencia4 pendencia3 = pendencia; FinPendencia4 pendencia4 = pendencia; FinPendencia4 pendencia5 = pendencia; FinPendencia4 pendencia6 = pendencia; FinPendencia4 pendencia7 = pendencia; FinPendencia4 pendencia8 = pendencia; FinPendencia4 pendencia9 = pendencia; FinPendencia4 pendencia10 = pendencia;
Gostei + 0
16/09/2014
Ronaldo Lanhellas
Quando você atribui o objeto pendencia ao pendencia1, você está fazendo uma referência apenas ao ponteiro mas continuará com apenas 1 objeto FinPendencia4 em memória, pois os objetos pendencia1,2,3,4,5... apontam para o "pendencia".
Gostei + 0
16/09/2014
Fernando Silva
Quando você atribui o objeto pendencia ao pendencia1, você está fazendo uma referência apenas ao ponteiro mas continuará com apenas 1 objeto FinPendencia4 em memória, pois os objetos pendencia1,2,3,4,5... apontam para o "pendencia".
Isso mesmo, na verdade sobre o funcionamento da referencia eu já até sabia, e a dúvida é, se estas referencias "ponteiros" consumem memória.
Porque o JPA automaticamente esta criando varias referencias para o mesmo objeto devido ao relacionamento.
Então fiquei com receio de que as referencias estavam consumindo memória.
Fico mais tranquilo em saber que que as referencias não consomem memória.
Gostei + 0
16/09/2014
Fernando Silva
Pois é amigo então não vou usar o relacionamento via JPA, vou fazer na mão, porque tenho vários casos de listas grandes.
Sendo assim, matou minha dúvida, Obrigado pela ajuda.
Gostei + 0
17/09/2014
Ronaldo Lanhellas
Pois é amigo então não vou usar o relacionamento via JPA, vou fazer na mão, porque tenho vários casos de listas grandes.
Sendo assim, matou minha dúvida, Obrigado pela ajuda.
De nada, boa sorte.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)