Classe Generica JPA

10 respostas
Vitao1718

Galera estou querendo fazer uma classe em java que persiste um obj generico , bom é o seguinte
tenho um método que recebe um Object porém para que eu possa persistir eu teria que saber a classe deste objeto e convertelo… vou postar o código …

<blockquote>public boolean Save(Object obj) {

EntityManagerFactory emf = Persistence.createEntityManagerFactory(RestaurantePU);

EntityManager em = emf.createEntityManager();

//aqui mais ou menos teria que ser onde tranformo o obj para poder persistir ele porém não sei como fazer

em.getTransaction().begin();
    try {
        em.persist(obj);//aqui normalmente eu passo o obj do tipo de uma classe de entidade mas agora preciso converte-lo
        em.getTransaction().commit();
        em.close();
        return true;
    } catch (Exception e) {
        em.getTransaction().rollback();
        e.printStackTrace();
        em.close();
        return false;
    }
}

10 Respostas

Vitao1718

bom estou testando mas pelo jeito eu passo o Object e ele ja persiste \o_ haha eu amo programação de alto nível :twisted:

B

Vitao1718:
Galera estou querendo fazer uma classe em java que persiste um obj generico , bom é o seguinte
tenho um método que recebe um Object porém para que eu possa persistir eu teria que saber a classe deste objeto e convertelo… vou postar o código …

<blockquote>public boolean Save(Object obj) {

EntityManagerFactory emf = Persistence.createEntityManagerFactory(RestaurantePU);

EntityManager em = emf.createEntityManager();

//aqui mais ou menos teria que ser onde tranformo o obj para poder persistir ele porém não sei como fazer

em.getTransaction().begin();
    try {
        em.persist(obj);//aqui normalmente eu passo o obj do tipo de uma classe de entidade mas agora preciso converte-lo
        em.getTransaction().commit();
        em.close();
        return true;
    } catch (Exception e) {
        em.getTransaction().rollback();
        e.printStackTrace();
        em.close();
        return false;
    }
}

No seu metodo save, ao inves de pedir um Object, pede um T, e a sua classe generica vc declara ela com Generics

class MeuDAOGenerico<T>
{
// corpo da classe
}

Aí, vc pode converter do jeito que vc quiser. Se vc precisar de algum metodo específico, é so vc definir no generics que a classe deve implementar alguma coisa, uma interface de preferencia

class MeuDAOGenerico<T extends xxx>
{
// corpo da classe
}

Aí, no seu metodo save, ficaria assim:

public boolean Save(T obj)
{
// corpo do metodo
}
71C4700

Desculpa !
Sou iniciante em Java,
Como assim

class MeuDAOGenerico<T extends xxx>  
   {  
   // corpo da classe  
 }

???
???
Agradeço, a ajuda !!

B

71C4700:
Desculpa !
Sou iniciante em Java,
Como assim

class MeuDAOGenerico<T extends xxx>  
   {  
   // corpo da classe  
 }

???
???
Agradeço, a ajuda !!

No JAVA 1.5 existe o conceito de Generics, que é similar ao Template do C++
da uma olhada aki:
http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
http://www.mundooo.com.br/php/mooartigos.php?pa=showpage&pid=22 (em portugues)

Resumidamente falando, Generics é um conceito implementado em java para a definição de um tipo que poderá ser parametrizado na utilização da classe a qual foi definida que aceita um tipo generico.

É um conceito bem interessante, e meio extenso para explicar. Agora to meio sem tempo, se pudesse faria mais exemplos para você.
Aqui vai um:

Se vc ja utilizou em algum momento um List, Collection, Set, ou outras estruturas de coleções, talves vc ja tenha utilizado da seguinte forma:

private List<MeuObjeto> listaObjetos;

Nesse momento, vc acabou de parametrizar o tipo de objeto que sera guardado nessa coleção, então, na declaração da interface List, vc tem algo assim:

public interface List<T>
{
}

Então, o que isso te diz?
Que essa inteface List ira servir para guardar objetos do tipo T. Sendo os metodos add, remove, get, etc, dessa interface List, utilizando o T ao inves de Object, e vc parametrizando o atributo como eu fiz logo acima, vc nao precisará dar casting para o tipo correto no metodo get para manipular o objeto. Então, o metodo get retorna um T ao invéz de Object.

Se vc está iniciando em JAVA, pode ser que essa minha explicação tenha ficado meio confusa mesmo. Então, leia o conteudo dos links que passei, e se quiser, leia antes a aposlita da Caelum do curso FJ11:

VLW

71C4700

Cara, muito obrigado pela explicação !
Mesmo o Generic eu tinha entendido, não entendi
o

T

Tao ???
Obrigado, eu aprendo assim apanhando !
rsrs

B

71C4700:
Cara, muito obrigado pela explicação !
Mesmo o Generic eu tinha entendido, não entendi
o

T

Tao ???
Obrigado, eu aprendo assim apanhando !
rsrs

Hehe… eu escrevi errado… nao é Tao é T
ja ta corrigido aí

71C4700

Mas continuo querendo saber!

T

Este T , es ??

B

71C4700:
Mas continuo querendo saber!

T

Este T , es ??

Hehe… foi como eu disse, esse assunto é meio complexo de se explicar e de se entender de primeira.

Mas é o seguinte, esse T é um apelido que eu dei para o tipo da classe que eu estou esperando na declaração do Generics… poderia ser qualquer coisa. Então, esse T é o apelido que eu vou usar na minha classe, ao invés de Object por exemplo:

Uma classe normal sem Generics

class FazAlgumasCoisas
{
   public Object fazCoisaERetorna()
   {
      // corpo do metodo
   }
}

Com essa classe, quando vc for obter o retorno desse metodo, vc terá que dar casting para o tipo correto que vc quer.
usando:

FazAlgumasCoisas fazCoisas = new FazAlgumasCoisas();

MinhaClasse obj = (MinhaClasse) fazCoisas.fazCoisaERetorna();

Agora, a mesma classe com Generics

class FazAlgumasCoisas<T>
{
   public T fazCoisaERetorna()
   {
      // corpo do metodo
   }
}

Usando com Generics, na hora de vc declarar a variavel que ira guardar o objeto do tipo FazAlgumasCoisas, vc declara ja com o tipo do objeto que vc ira usar, assim:
usando:

FazAlgumasCoisas<MinhaClasse> fazCoisas = new FazAlgumasCoisas<MinhaClasse>();

MeuObjeto obj = fazCoisas.fazCoisaERetorna(); // direto, sem casting

Então o T é apenas um apelido, poderia ser qualquer coisa… X, Y, Z… Geralmente utiliza-se T que significa Type (tipo)…

VLW

71C4700

Muito obrigado, pela Aula de OO!
Valeu mesmo

B

71C4700:
Muito obrigado, pela Aula de OO!
Valeu mesmo

Espero que tenha conseguido tirar a sua duvida

Se tiver mais alguma duvida, posta ae que se eu nao souber te responder, a galera vai saber.

VLW

Criado 27 de julho de 2008
Ultima resposta 27 de jul. de 2008
Respostas 10
Participantes 3