OnetoMany

Olá pessoal,

Estou com problemas com A entidade Pessoa tem muitos contato, porém dá erro: :smile:

@OneToMany
@JoinColumn(name=“idContato”)
private Contato contato;

Erro:
ERROR 19398 — [ 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 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.

A mensagem de erro em questão:

se refere a ausência de getter para um ou mais atributos, conform HibernateMappingException do nada? [RESOLVIDO]

@OneToMany  
@JoinColumn(name = "id_contato")
private List<Contato> contatos; 

******Get/ set

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

Fez isso?

Sim, acabou que o STS não “importou” java.util.List corretamente, tive que fazer na mão.