Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Falta classe

Injetando o EntityManager
Até agora usamos a classe Banco para simular um banco de dados, mas chegou a hora de realmente persistir os dados. O primeiro passo é injetar o EntityManager; interface principal da especificação JPA. Para tanto, onde usávamos Banco, passaremos a usar o EntityManger.

O EntityManager possui métodos de alto nível para trabalharmos com objetos. Para salvar o autor podemos usar o método persist():

manager.persist(autor);
Para listar todos os autores, basta executar uma query:

manager.createQuery("select a from Autor a", Autor.class).getResultList();
Por último, podemos procurar um autor pelo id:

manager.find(Autor.class, autorId);
Pronto, a classe AutorDao já está compilando, agora só falta ajustar a anotação de injeção de dependência. Quando injetamos um EntityManager não podemos utilizar a anotação @Inject. Nesse caso, o Contexts and Dependency Injection (CDI), outra especificação com o foco na injeção de dependência, buscaria o EntityManager. No entanto não encontraria o objeto e causaria uma exceção. Como o EJB Container administrará o JPA, é preciso usar uma anotação especifica do mundo EJB, nesse caso @PersistenceContext:

@PersistenceContext
EntityManager manager;
Isso fará com que o EJB Container injete o EntityManager. Mas qual banco de dados vamos utilizar e qual é o endereço desse banco? Para tudo isso realmente funcionar, temos que definir algumas configurações sobre o banco de dados.

Mas como e a classe EntiniManager ?

Meu AutorDAO ficou assim:

@Stateless
public class AutorDao {

    @Inject
    private Banco banco;

    public void salva(Autor autor) {
        manager.persist(autor);
    }

    public List<Autor> todosAutores() {
        manager.createQuery("select a from Autor a", Autor.class).getResultList();
    }

    public Autor buscaPelaId(Integer autorId) {
        manager.find(Autor.class, autorId);
    }

So que todo manager. da erro

4 respostas

Oi Rafael,

"So que todo manager. da erro"

O que dá erro? A compilação? A execução? dá mais dicas pra gente!

abs

Todas as linas que tem:

So que todo manager. da erro

Nao existe a manager.

solução!

Agora sim! O screenshot pode ser melhor do que mil palavras :)

Vc precisa declarar o EntityManager como atributo e injetá-lo. Na classe AutoDao, logo depois do atributo banco adicione:

@PersistenceContext
EntityManager manager;

Na esqueça de importar as classses.

abs