org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘entityManagerFactory’ defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: com.doutores2019.domain.Pessoa.contato
Ou você define que cada Pessoa tem nenhum ou apenas um único contato e faz isso:
@OneToOne
private Contato contato;
Ou você define que pode ter 0 ou vários contatos e faz isso:
@OneToMany
@JoinColumn(name = "id_contato")
private List<Contato> contatos; //Ou Collection<Contato> ou Bag<Contato> ou Set<Contato>
O erro indica que você não pode, jamais, dizer que tem uma persistent bag (um tipo de coleção) sendo mapeado em um atributo único (que não é uma coleção).
questão é que, quando coloco a coleção ele também dá erro, não aceita a Lista private List<Contato> contatos;* : O STS sinaliza erro e pede para remover o argumento Contato da List
e
ERROR 19999 — [ restartedMain] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘entityManagerFactory’ defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
.
.
java.lang.Error: Unresolved compilation problem:
The type List is not generic; it cannot be parameterized with arguments
at com.doutores2019.domain.Pessoa.<init>(Pessoa.java:40) ~[classes/:na]
... 48 common frames omitted
Se você leu as mensagens de erro, percebeu que elas são bem diferentes.
A primeira, que foi a que usei como parâmetro para a resposta anterior, indica que você está tentando mapear um objeto simples como sendo uma coleção. Isso não pode ser feito.
Veja nos imports se o Listr que ele importou é o java.util.List. Se não for, obviamente ocorrerá este erro indicado pelo STS.
public List<Contato> getContatos() {
return contatos;
}
public void setContatos(List<Contato> contatos) {
this.contatos = contatos;
}
Erro por não aceitar o argumento:
ERROR 20322 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
.
.
by: java.lang.Error: Unresolved compilation problem:
The type List is not generic; it cannot be parameterized with arguments <Contato>
at com.doutores2019.domain.Pessoa.<init>(Pessoa.java:40) ~[classes/:na]
... 48 common frames omitted