[MySQL] Problema com atributo em formato List

5 respostas
A

Ola galera,

Estou com um problema ao utilizar List no Hibernate/MySQL;

Em seguida, segue o meu codigo e o erro.

@Entity
public class Pointage {

    @Id
    @GeneratedValue
    private Long id;
    
    private Double nbHeure;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Calendar datePourPointage;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Calendar dateSysteme;
    
    private List<String> caracPointage = new ArrayList<String>();  //problema

    
    @OneToMany
    List<Personnes> personnes = new ArrayList<Personnes>();
    
    //gets and sets
[list]

INFO: Hibernate Validator not found: ignoring

Exception in thread “main” java.lang.ExceptionInInitializerError

at com.alstom.ems2.model.App.main(App.java:25)

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: ems2PU] 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:51)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)

at com.alstom.ems2.dao.Donnees.(Donnees.java:19)

… 1 more

Caused by: org.hibernate.MappingException: Could not determine type for: java.util.List, for columns: [org.hibernate.mapping.Column(caracPointage)]

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 org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)

at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)

… 5 more

Java Result: 1

[/list]

O que deve ser utilizado ? Ou como se deve declarar a List para funcionar
Ja testei Set, Collection e todos apresentam “erro” parecido.

Obrigado galera.

5 Respostas

darksteel3000

Olá amigo, você pretende utilizar esse List juntamente ao Banco de dados? Se sim, porque ele ainda não está mapeado? Caso não for usar marque ele com o @Transient

A

Ola darksteel3000, sim, preciso utilizar essa List no banco de dados, como seria o mapeamento dela ?

Estou usando Hibernate JPA 1.0

Grato,
Amplexo

darksteel3000

Depende amigo. Da mesma forma que você mapeou essa:

@OneToMany List&lt;Personnes&gt; personnes = new ArrayList&lt;Personnes&gt;();

Você mapeia a outra, ai vai depender do caso, porque? Porque tipo, essa acima você mapeou como 1-N. No seu contexto a outra que falta também será 1-N ? Se sim, vai o @OneToMany, senão vale a pena ler esse artigo: http://www.futurepages.org/wiki/lib/exe/fetch.php?media=quickstart:hibernate_anotacoes.pdf dê uma boa olhada nos capitulos 11, 12 e 13. Neles contem tudo o que você precisa saber sobre os mapeamentos.

A

Sim, mas netse caso, a list de String é um atributo da classe Pointage, entao, ela nao deve possuir anotacao de referencia entre classe, e sim de construcao para tabela.

Pesquisei na internet e vi que o JPA 2.0 da opcao de mapeamento com List, no caso, utilizando @ElementCollection, baxei o Hibernate versao 4.0.10 final, e ele da suporte para essa anotacao com o JPA 2.0, criei uma nova biblioteca de persistencia e adicionei os arquivos .jar necessario para poder utiliza-lo.

http://www.mohanarun.com/how-to-make-netbeans-use-hibernate-4-and-not-hibernate-3-2-5/

Até agora deu tudo certo.
O meu codigo ficou da seguinte forma:

@ElementCollection(fetch= FetchType.LAZY) @Column(name="CARAC_POINTAGE") private List<String> caracPointage = new ArrayList<String>();

é o maldito JPA 1.0.
Vou ler a sua indicacao.

Obrigado

darksteel3000

Ok, qualquer coisa só falar !

Criado 22 de fevereiro de 2013
Ultima resposta 25 de fev. de 2013
Respostas 5
Participantes 2