Pessoal ainda estou estudando JPA.
Estou agora utilizando o Netbeans, pela facilidade de criação das classes, como estou fazendo vários testes quanto mais rápido for para criar as classes melhor, e o netbeans faz isso automaticamente de acordo com o
http://www.netbeans.org/download/flash/netbeans_55/screencast-5.5.1-pt_BR/screencast-nb-final.html
Bom vamos as dúvidas.
O netbeans gerou pra mim automaticamente a classe Cidade e a classe Estado com seus gets e sets e criou tbm NamedQuerys.
Mas agora eu quero criar a classe que vai fazer o insert, delete e update nas minhas tabelas. Pra isso queria saber como vou controlar o meu EntityManager?
Vi vários exemplos declarando em cada classe
e a cada ação de insert,edit ou update criar um EntityManager:
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
try {
em.persist(object);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
em.close();
}
Já li muita coisa, estou ficando um pouco confuso!
Alguem poderia me esclarecer um pouco, qual a melhor forma de controlar o uso de EMF e EM?
Todos os testes são locais mesmo, SE.
Vê se esse artigo te ajuda
[quote=homisinho]Pessoal ainda estou estudando JPA.
Estou agora utilizando o Netbeans, pela facilidade de criação das classes, como estou fazendo vários testes quanto mais rápido for para criar as classes melhor, e o netbeans faz isso automaticamente de acordo com o
http://www.netbeans.org/download/flash/netbeans_55/screencast-5.5.1-pt_BR/screencast-nb-final.html
Bom vamos as dúvidas.
O netbeans gerou pra mim automaticamente a classe Cidade e a classe Estado com seus gets e sets e criou tbm NamedQuerys.
Mas agora eu quero criar a classe que vai fazer o insert, delete e update nas minhas tabelas. Pra isso queria saber como vou controlar o meu EntityManager?
Vi vários exemplos declarando em cada classe
e a cada ação de insert,edit ou update criar um EntityManager:
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
try {
em.persist(object);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
em.close();
}
Já li muita coisa, estou ficando um pouco confuso!
Alguem poderia me esclarecer um pouco, qual a melhor forma de controlar o uso de EMF e EM?
Todos os testes são locais mesmo, SE.[/quote]
Essas coisas funcionam mas não são estruturadas da forma otimizada.
O principio da separação de responsabilidade dita que a classe que usa o EntityManager (EM) não deve saber como obtê-lo.
Aliás, essas é a função da fabrica do primeiro codigo.
Portanto, a classe que usa o EM deve receber ele da classe que der um new, i.e. do ambiente. Ai temos duas formas, ou vc passa no construtor , ou se o seu objeto é um bean, passa num set. O set é pior já que não garante que exista um EM setado.
Nestas condições quando vc criar a classe que usa o EM vc pssa o EM correto.
Isto é chamado Inversão de Controle.
Vc pode ir mais longe e usar um container de inversão de controle (aka injetor de dependencia) e deixar ele fazer o trabaho chato.
Se estiver no ambiente JEE isso já está incluso que poupa muito trabalho
Realmente isso me deixa em dúvida!!!
Tem muito material, já li muito mas um exemplo prático mesmo n encontrei nenhum, é muita explicação do q é Inversion Of Control and Dependency Injection blablablabla…
Na minha classe de acesso ao banco DAO, terei que ter um metodo como esse:
private EntityManager em;
public void persist(Object o)
{
em.persist(o);
}
Correto??? Mas ai eu pergunto eu terei que instanciar o objeto EMF,EM nos meus Frames?
Ou terei que utilizar um container de inversão de controle? um Spring da vida?
Realmente acho q de tanto ler abobrinha e blablabla, sem ver nada concreto e prático estou perdido.
primeira coisa… NUNCA nos seus frames hehehe procure talvez no suporte a JPA do Spring… vai ajudá-lo bastante, embora eu acredite que seja uma bazuca para matar sua mosquinha
Mas e pra mim n precisar usar o spring?
Eu posso fazer de q forma? onde eu vou intanciar o EMF e o EM?
e como posso garantir a funcionalidade dos mesmo? Tratar erros e tudo mais?