Para o mapeamento abaixo, para que serve o fetch? Qual a diferenca entre fetch = join e fetch = select?
TKS.
Para o mapeamento abaixo, para que serve o fetch? Qual a diferenca entre fetch = join e fetch = select?
TKS.
Olá,
Basicamente, isso quer dizer que quando o fetch tiver “join” ele irá pegar os dados de sua collection em uma única query, fazendo um join.
Se tiver select, ele fazer fazer uma monte de query para preencher sua collection.
[]´s
Existe uma diferenca no resultado da query?
Saberia dar um exemplo de como o hibernate está fazendo o select em ambos os casos?
Obrigado.
Se vc colocar join ele vai fazer tudo num select so, trazendo o seu objeto populado com todas as informacoes. Se vc colocar select ele nao vai trazer o dado desse relacionamento e ira fazer um select a primeira vez que o atributo for acessado!
O lazy=true faz com que as informacoes sejam trazidas quando eu acesso uma propriedade atraves de get, certo? entao qual a diferenca de lazy para select?
Nao sei se estou confundindo.
Desde ja muito obrigado.
Sim, vc esta confuso
Lazy diz QUANDO trazer.
lazy=“true” - Traga quando eu precisar ( ou seja. Quando eu acessar )
lazy = “false” - Traga junto com o objeto principal
Fetch diz COMO trazer.
fetch = “select” - Faça um select pra pegar esse atributo
fetch=“join” - Faça um join com o objeto principal e traga junto com ele. Essa opção ANULA a opção lazy = “true”
E ae? Pescou!?
Opa, já estou menos confuso.
fetch= select e lasy = true, sempre sao usados em conjunto ?
fetch = join e lay = false, sempre sao usados em conjunto?
o default seria fetch = select e lazy = true?
TKS.
Vê minha dúvida.
tenho a seguinte classe:
@Entity
class usuario{
…
@ManyToMany
private Set permissoes
…
}
peguei um objeto e o coloquei na Sessão. em algum momento durante a utilização do sistema pelo usuário, preciso pegar os dados contidos nesse atributo, porem o hibernate não consegue fazer o lazy, pois a transação já fora fechada. tive que por o Lazy=false, mas, gostaria de saber como fazer para trabalhar com lazy=true
[quote=jeffersonbezerra]Vê minha dúvida.
tenho a seguinte classe:
@Entity
class usuario{
…
@ManyToMany
private Set permissoes
…
}
peguei um objeto e o coloquei na Sessão. em algum momento durante a utilização do sistema pelo usuário, preciso pegar os dados contidos nesse atributo, porem o hibernate não consegue fazer o lazy, pois a transação já fora fechada. tive que por o Lazy=false, mas, gostaria de saber como fazer para trabalhar com lazy=true[/quote]
na verdade se vc trabalha do jeito que vc escreveu acima(ANNOTATIONS), vc naum utilizaria lazy=true, nem lazy=false, e sim, vc utilizaria:
@ManyToMany(...,fetch = FetchType.LAZY)
private Set<Recurso> permissoes
ou
@ManyToMany(...,fetch = FetchType.EAGER)
private Set<Recurso> permissoes
EAGER, seria equivalente lazy = false.
Não esquecendo das outras propriedades que são necessárias para complementar o Mapeamento @ManyToMany.