segunda-feira, 9 de abril de 2012

Re: [java-br] FetchType.Lazy

·

Roger,
Entao cara assim eu fiz e tenho quase certeza que vai servir para
voce,vamos la:
Criei um classe managerEnity assim:
public class ManagerEntity {

private EntityManager em;
public void begin(){
if(!this.em.getTransaction().isActive()){
this.em.getTransaction().begin();
}
}
public void commit(){
this.em.getTransaction().commit();
}
public void rollback(){
this.em.getTransaction().rollback();
}
public void flush(){
this.em.flush();
}
public void close(){
this.em.close();
}
public EntityManager getEm() {
return em;
}
public void setEm(EntityManager em) {
this.em = em;
}
}

e assim todas as minhas DAOS a minha generica tbm extende ela assim atraves
de heranca ele gerencia abertura de transacao comit,roolback e
entitymanager.
por exemplo minha DAO ficaria assim:

public class CarroDAO extends ManagerEntity implements CarroImp{

private EntityManager manager;
private Logger log=Logger.getLogger(CarroDAO.class);
public CarroDAO() {
manager=JPAUtil.getInstance().getManager();
this.setEm(manager);
}
@Override
public void atualizar(Carro carro) throws Exception{
try {
this.begin();
this.manager.merge(carro);
this.flush();
this.commit();
} catch (Exception e) {
this.rollback();
log.warn("Erro ao atualizar Carro!",e);
throw new Exception(e);
}finally{
this.close();
}
}


@Override
public void inserir(Carro carro) throws Exception{
try {
this.begin();
this.manager.persist(carro);
this.flush();
} catch (Exception e) {
this.rollback();
log.warn("Erro ao inserir carro", e);
throw new Exception(e);
}finally{
this.close();
}
}

@Override
public void remover(Carro carro) throws Exception{
try {
this.begin();
this.manager.remove(carro);
this.flush();
this.commit();
} catch (Exception e) {
this.rollback();
throw new Exception(e);
}finally{
this.close();
}
}

@Override
public List<Carro> consultaCarroPorIDCliente(Long id) throws Exception {
try {
this.begin();
String sql = "SELECT C FROM Carro C WHERE cliente_idCliente=:idCliente";

Query qry = manager.createQuery(sql);
qry.setParameter("idCliente", id);
this.flush();

return qry.getResultList();

} catch (Exception e) {
this.rollback();
throw new Exception(e);
} finally {
this.commit();
}

}
Bom roger ta tranquilo cara acho que isso pode te dar uma luz,mas qualquer
coisa se eu puder ajudar me avisa,blz

falou cara boa sorte.

Em 9 de abril de 2012 16:22, Roger Rayner Cunha Bento <
roger.rayner@totvs.com.br> escreveu:

> **
>
>
> Sergio,
>
> Não sei se isso responde a tua pergunta....
> /*Definição do EntityManager*/
> @PersistenceContext(unitName="ccb_context")
> private EntityManager em;
>
> /*Execução da query*/
> Query qUserList = em.createNamedQuery("getAllUsers");
> userList = new ArrayList<User>();
> userList = qUserList.getResultList();
>
> Estou utilizando EJB + hibernate e deixo o EntityManager cuidar da
> sessão... :)
>
> Att.,
> Roger Rayner
> Inovação COMEX
> Unidade Joinville
> U 55 (47) 3802-8110 (novo)
> ( roger.rayner@totvs.com.br
>
> -----Mensagem original-----
> De: java-br@yahoogrupos.com.br [mailto:java-br@yahoogrupos.com.br] Em
> nome de Sergio Felipe Santiago Moreira
> Enviada em: segunda-feira, 9 de abril de 2012 13:51
> Para: java-br@yahoogrupos.com.br
> Assunto: Re: [java-br] FetchType.Lazy
>
>
> Eae roger! então cara vamos la!
> Eu não estou com o codigo aqui no momento mas eu vou pra facul hj e pego
> meu not eu mando pra você de la,mas pra ir adiantando vou te passar o
> conceito que eu usei e você consegue até fazer melhor do que eu fiz,vamos
> la:
>
> Me passa como você esta gerenciando suas session,ex: você criou um
> HibernateUtil ou alguem responsavel pela suas sessions,certo?
> me explica como você fez ai te mostro como fiz usando o seu como exemplo.
>
> Vlew aguardo seu retorno.
>
> Em 9 de abril de 2012 11:26, Roger Rayner Cunha Bento <
> roger.rayner@totvs.com.br> escreveu:
>
> > **
>
> >
> >
> > Oi Sergio,
> >
> > Poderia me enviar um exemplo?
> >
> > Obrigado.
> >
> > Sergio Felipe Santiago Moreira <sergiofelipesm@ig.com.br> escreveu:
> >
> >
> > Bom dia !
> > Bom olha eu vejo que o problema ai é somente seu controle de
> > session,você esta fechando a conexao,e se você poe como Lazy a cada
> > getAtributo() você vai no banco e consulta,sendo um left join então
> > ele quando esta tentando pegar algum atributo ou left das tabelas sua
> > sessão ja esta fechada,então te aconselho controlar sua session ,tive
> > esse problema de sessions com collection lazy e resolvi utilizando o
> > singleton onde gerencia -se a session e com herança,qualquer duvida eu
> > posso te mostrar como você poderia fazer.
> > valeu
> > boa sorte!
> >
> > Em 7 de abril de 2012 17:42, Roger Rayner Cunha Bento <
> > roger.rayner@totvs.com.br> escreveu:
> >
> > > **
> >
> > >
> > >
> > > Boa tarde,
> > >
> > > Estou com um problema que não estou conseguindo resolver. Já
> > > pesquisei na web e não consegui encontrar uma solução. Espero que
> > > alguém já tenha passado por isso e possa me ajudar.
> > >
> > > Tenho duas classes com relacionamento @ManyToMany (definções abaixo).
> > >
> > > User
> > > @ManyToMany(mappedBy="userList", fetch=FetchType.LAZY) private
> > > Set<UserGroup> userGroupList = new HashSet<UserGroup>();
> > >
> > > UserGroup
> > > @ManyToMany(fetch=FetchType.LAZY, cascade= {CascadeType.DETACH,
> > > CascadeType.PERSIST, CascadeType.MERGE})
> > > @JoinTable(name="USER_GROUP_RELAC",
> > > joinColumns={@JoinColumn(name="OID_USER_GROUP")},
> > > inverseJoinColumns={@JoinColumn(name="OID_USER")})
> > > private Set<User> userList = new HashSet<User>();
> > >
> > > Como podem ver ambas as listas eu coloquei como fetch=FetchType.LAZY
> > > pois não quero sobrecarregar a aplicação. Quando vou buscar o meu
> > > usuário pelo id (que só irá retornar 1 registro) uso a EJB QL abaixo:
> > >
> > > @NamedQuery(name="UserById",
> > > query="FROM User u LEFT JOIN FETCH u.emailList " + "LEFT JOIN FETCH
> > > u.userGroupList " + "where u.user_id like :user_id"),
> > >
> > > Mesmo utilizando o LEFT JOIN FETCH é retornado o erro abaixo e não
> > > sei mais oq fazer.
> > >
> > > failed to lazily initialize a collection of role:
> > > content.UserGroup.userList, no session or session was closed
> > >
> > > O LEFT JOIN FETCH não deveria carregar minhas coleções? Para evitar
> > > o
> > erro
> > > da sessão já estar fechada? Alguem sabe como me ajudar?
> > >
> > > Fico no aguardo.
> > >
> > > Obrigado.
> > >
> > >
> > >
> >
> > --
> > Sergio Felipe Santiago Moreira
> > *Site*: http://misistema.zapto.org:8090
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> > ------------------------------------
> >
> >
> > Para sair da lista, envie email para:
> > java-br-unsubscribe@yahoogroups.com
> > Para upload/download de arquivos:
> > http://www.yahoogroups.com/files/java-brLinks do Yahoo! Grupos
> >
> >
> >
>
> --
> Sergio Felipe Santiago Moreira
> *Site*: http://misistema.zapto.org:8090
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> ------------------------------------
>
> Para sair da lista, envie email para: java-br-unsubscribe@yahoogroups.com
> Para upload/download de arquivos:
> http://www.yahoogroups.com/files/java-brLinks do Yahoo! Grupos
>
>
>

--
Sergio Felipe Santiago Moreira
*Site*: http://misistema.zapto.org:8090


[As partes desta mensagem que não continham texto foram removidas]

------------------------------------

Para sair da lista, envie email para: java-br-unsubscribe@yahoogroups.com
Para upload/download de arquivos: http://www.yahoogroups.com/files/java-brLinks do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/java-br/

<*> Para sair deste grupo, envie um e-mail para:
java-br-unsubscribe@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html

0 comentários:

Pague com LPs do Mister Colibri

Pague com LPs do Mister Colibri
Quer comprar celular,Tablet,pen drive, GPS e muito outros produtos e ainda podendo pagar tudo em LPs ?Pois saiba que isso é possível,basta você visitar o site downloadstotal.com e realizar a sua compra com toda tranquilidade e segurança!!!

Hora

Online

Arquivo do Blog