Utilizando Annotations em JPA
Bom dia caros amigos, gostaria de tirar uma dúvida. Eu andei vendo as video-aulas de JPA, do Dyego Carmo, e verifiquei um detalhe:
Ele usou
@Entity(name="xx")
@Table(name="xx") ,
Depois ele não utilizou mais o @Table, ou seja, apenas o @Entity(name="xx"). E tudo funcionava normalmente, porém ele não explicou no vídeo o porquê que não se utilizou mais o @Table, e eu gostaria de entender essa diferença.
Para que serve o @Table, se eu posso colocar dentro do meu persist unit <class></class> e utilizar somente o @Entity ?
É sempre melhor, ou seja, é bom uso de código, utilizar o @Table ? ou é melhor o jeito como citei em cima, add class dentro do persist unit e só utilizar o @Entity ?
Ou é porque era chave composta e ele não referenciou nenhuma Tabela ?
Eu já percebi que nem toda entidade no JPA será uma tabela no banco de dados, então vem outra pergunta, quando é que eu utilizo uma tabela como entidade ? Ou seja, quando é que eu vou ter uma tabela no banco de dados e que ela não seja uma entidade JPA?
Gostaria de obter um feedback de vocês.
Agradeço a atenção ! Obrigado.
Ele usou
@Entity(name="xx")
@Table(name="xx") ,
Depois ele não utilizou mais o @Table, ou seja, apenas o @Entity(name="xx"). E tudo funcionava normalmente, porém ele não explicou no vídeo o porquê que não se utilizou mais o @Table, e eu gostaria de entender essa diferença.
Para que serve o @Table, se eu posso colocar dentro do meu persist unit <class></class> e utilizar somente o @Entity ?
É sempre melhor, ou seja, é bom uso de código, utilizar o @Table ? ou é melhor o jeito como citei em cima, add class dentro do persist unit e só utilizar o @Entity ?
Ou é porque era chave composta e ele não referenciou nenhuma Tabela ?
Eu já percebi que nem toda entidade no JPA será uma tabela no banco de dados, então vem outra pergunta, quando é que eu utilizo uma tabela como entidade ? Ou seja, quando é que eu vou ter uma tabela no banco de dados e que ela não seja uma entidade JPA?
Gostaria de obter um feedback de vocês.
Agradeço a atenção ! Obrigado.
Euclides Filizola
Curtidas 0
Respostas
Henrique Weissmann
10/08/2009
Se a tag table não for definida, o JPA entende que a tabela possui o mesmo nome que a tabela, similar ao modo como o Hibernate mapeia suas classes de entidade às tabelas no banco de dados.
GOSTEI 0
Euclides Filizola
10/08/2009
Então pelo que eu entendi, se eu tiver uma tabela chamada Cliente e fizer:
@Entity(name="Cliente")
é o mesmo que:
@Entity
@Table(name="Cliente") ?
E as demais perguntas ? Não me foram respondidas :(
@Entity(name="Cliente")
é o mesmo que:
@Entity
@Table(name="Cliente") ?
E as demais perguntas ? Não me foram respondidas :(
GOSTEI 0
Henrique Weissmann
10/08/2009
>Então pelo que eu entendi, se eu tiver uma tabela chamada Cliente e fizer:
>@Entity(name="Cliente")
>é o mesmo que:
>@Entity
>@Table(name="Cliente") ?
Nesta situação, sim. No entanto, acho que sempre é uma boa idéia incluir a anotação Table de qualquer maneira, nem que seja apenas para documentar, tornando explícito este mapeamento para aqueles que não dominem JPA ainda (pense no seu caso, por exemplo: você não sabia que a annotation Table é opcional quando o nome da tabela é igual ao nome da entidade)
> quando é que eu utilizo uma tabela como entidade ? Ou seja, quando é que eu vou ter uma tabela no banco > de dados e que ela não seja uma entidade JPA?
Lembre-se do seguinte: as tabelas no banco de dados são o resultado do seu processamento: explicando melhor, você só cria tabelas no banco de dados quando deseja armazenar os valores dos atributos das suas classes.
Sendo assim, se é de seu interesse que sua classe seja persistida como um registro em uma tabela de banco de dados, é interessante que você utilize uma tabela no BD para armazenar estas informações.
Quando uma tabela não precisa ser uma entidade do JPA? Simples, quando ela não faz parte do domínio da sua aplicação. Se você tem por exemplo em seu banco de dados uma tabela que não é utilizada pelo seu sistema, então não precisa criar uma classe de domínio para a representar.
>@Entity(name="Cliente")
>é o mesmo que:
>@Entity
>@Table(name="Cliente") ?
Nesta situação, sim. No entanto, acho que sempre é uma boa idéia incluir a anotação Table de qualquer maneira, nem que seja apenas para documentar, tornando explícito este mapeamento para aqueles que não dominem JPA ainda (pense no seu caso, por exemplo: você não sabia que a annotation Table é opcional quando o nome da tabela é igual ao nome da entidade)
> quando é que eu utilizo uma tabela como entidade ? Ou seja, quando é que eu vou ter uma tabela no banco > de dados e que ela não seja uma entidade JPA?
Lembre-se do seguinte: as tabelas no banco de dados são o resultado do seu processamento: explicando melhor, você só cria tabelas no banco de dados quando deseja armazenar os valores dos atributos das suas classes.
Sendo assim, se é de seu interesse que sua classe seja persistida como um registro em uma tabela de banco de dados, é interessante que você utilize uma tabela no BD para armazenar estas informações.
Quando uma tabela não precisa ser uma entidade do JPA? Simples, quando ela não faz parte do domínio da sua aplicação. Se você tem por exemplo em seu banco de dados uma tabela que não é utilizada pelo seu sistema, então não precisa criar uma classe de domínio para a representar.
GOSTEI 0
Euclides Filizola
10/08/2009
Beleza Henrique. Muito obrigado. Obrigado pelas informações. Abraços.
GOSTEI 0