Could not determine type for: java.util.List

2 respostas
roberto_sc

Olá

Estou recebendo uma exceção erro pq minha classe possui um método tipo public List<Coisa> getAlgumasCoisas() sendo que ela não possui associação com Coisa. Explicando melhor, o método tem seu nome começando com “get”, se ele se chamasse pegAlgumasCoisas() não teria problema. E também o problema só ocorre quando o retorno é List<>.

Parece que o Hibernate usa os métodos get para gerar as colunas do banco, então a pergunta é: não posso ter um método getBLA se não houver atributo/associação BLA?

A exceção é a seguinte:

Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: DATAMODEL] Unable to build EntityManagerFactory
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
	at testpackage.Main.main(Main.java:15)
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.List, at table: PLAT, for columns: [org.hibernate.mapping.Column(address)]
	at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:292)
	at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:276)
	at org.hibernate.mapping.Property.isValid(Property.java:207)
	at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:458)
	at org.hibernate.mapping.JoinedSubclass.validate(JoinedSubclass.java:63)
	at org.hibernate.cfg.Configuration.validate(Configuration.java:1135)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1320)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
	... 4 more

Obrigado!

2 Respostas

rubinelli

Roberto,

Se você realmente quiser ter um método que siga o padrão JavaBean (começa com get, não recebe argumentos) você pode marcá-lo como @Transient, mas eu acho melhor você adotar outro padrão. Por que você não usa findAlgumaCoisa()? É o que eu normalmente encontro para métodos que fazem busca no banco.

roberto_sc

rubinelli

obrigado por responder.

Eu passei a anotar os atributos ao invés dos métodos e aí o Hibernate ignorou os métodos com get.

Existe alguma vantagem em anotar os métodos ao invés de atributos?

Criado 11 de março de 2009
Ultima resposta 13 de mar. de 2009
Respostas 2
Participantes 2