Hibernate Annotations  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
velo
GUJ Ranger
[Avatar]

Membro desde: 19/02/2004 18:23:55
Mensagens: 797
Localização: Jaraguá do Sul - SC
Offline

Pessoas,

Teoricamente, com o hibernate annotations eu posso anotar os atributos ao invez do get/set, certo?

Agora pq o codigo:

Dah o seguinte erro:
org.hibernate.MappingException: Could not determine type for: java.util.List, for columns: [org.hibernate.mapping.Column(dimensions)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:266)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)
at org.hibernate.mapping.Property.isValid(Property.java:185)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:440)
at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1102)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1287)
at com.orzare.base.persistence.HibernateUtil.<clinit>(HibernateUtil.java:30)
... 19 more




Detalhe, annotando assim:

Funciona!

Use o melhor:

Linux para servidores
Macintosh para gráficos
Palm para mobilidade
Windows para jogar paciência

SCJP 5
[Email] [MSN] [ICQ]
plentz
Moderador
[Avatar]

Membro desde: 28/01/2004 07:34:12
Mensagens: 1584
Localização: Porto Alegre, RS
Offline

Não só teoricamente, na prática também. Tente recompilar a classe após colocar a annotation de volta pro atributo e teste novamente. O funcionamento é exatamente o mesmo.

Diego Plentz - Twitter
"Provide options, don't make lame excuses."
[Email] [WWW]
Alexandre Vilas Boas
JavaTeenager
[Avatar]

Membro desde: 07/05/2004 15:57:56
Mensagens: 181
Localização: São Paulo
Offline

plentz wrote:Não só teoricamente, na prática também. Tente recompilar a classe após colocar a annotation de volta pro atributo e teste novamente. O funcionamento é exatamente o mesmo.


Oi Velo e Diego

Realmente o hibernate funciona quando você anota o atributo ou o getter, mas existe uma diferença no funcionamento que pode fazer toda diferença.(ficou boa a frase hein)

Dependendo se você anota o atributo ou método, o tipo do acesso usado pelo Hibernate será o atributo ou o método. Portanto, se utilizarmos as anotações nos atributos e disponibilizarmos getters para eles, quando o hibernate for persistir ele não vai usar os métodos, exemplo:

setamos o atributo cpf com: 123.456.789-01
nosso metódo getter remove a mascara

o que será gravado no banco?
isso, o cpf com a mascara, já se mudarmos as anotações para os métodos, o getter é chamado e será gravado sem a máscara. O mesmo vale para os setters.

O tipo de acesso usado pelo hibernate, vai levar em consideração a posição de @Id ou @EmbeddedId e misturar anotações em atributos e métodos deve ser evitado.

Particularmente achei isso excelente.

[]'s

Consolador inside
velo
GUJ Ranger
[Avatar]

Membro desde: 19/02/2004 18:23:55
Mensagens: 797
Localização: Jaraguá do Sul - SC
Offline

plentz wrote:Não só teoricamente, na prática também. Tente recompilar a classe após colocar a annotation de volta pro atributo e teste novamente. O funcionamento é exatamente o mesmo.


Estranho, testei isso ontem varias vezes annotando no atributo, nada de funcionar, tava me achando burro já. Passei pro get parou de dar erro!

Que versão do hibernate annotations vc uso pra testar?

Detalhe, só dá erro em coleções.


VELO

Use o melhor:

Linux para servidores
Macintosh para gráficos
Palm para mobilidade
Windows para jogar paciência

SCJP 5
[Email] [MSN] [ICQ]
urubatan
Moderador
[Avatar]

Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline

só pra constar, a anotação funciona nos atributos se todas estiverem nos atributos (na verdade a que vira achave e diz se é em atributos ou geters é a @Id)
se o @Id estiver em um atributo, todas as outras também devem estar, se estiver em um getter idem ...

o esquema é que não da pra misturar as coisas ...

[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
[WWW]
plentz
Moderador
[Avatar]

Membro desde: 28/01/2004 07:34:12
Mensagens: 1584
Localização: Porto Alegre, RS
Offline

Pra futuras consultas fica a referência...

http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/#d0e161

Depending on whether you annotate fields or methods, the access type used by Hibernate will be field or property. The EJB3 spec requires that you declare annotations on the element type that will be accessed, i.e. the getter method if you use property access, the field if you use field access. Mixing EJB3 annotations in both fields and methods should be avoided. Hibernate will guess the access type from the position of @Id or @EmbeddedId.


Porém, isso pode ser sobrescrito usando a anotação @AccessType do Hibernate.

http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/#d0e2065

Diego Plentz - Twitter
"Provide options, don't make lame excuses."
[Email] [WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team