Erro : org.hibernate.AnnotationException: @OneToOne or @ManyToOne

Tenho a seguinte estrutura:

1 - Projeto XXXX - Model , onde tem as entidades do COR
Projeto Maven , e contem o arquivo persistence.xml com todas as entidades do projeto, e por exemplo tenho essa entidade

@Entity
@Table(name = "empresa", schema = "cadastro")
@ALL
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonIdentityInfo(generator = JSOGGenerator.class)
public class Empresa extends AuthAuditable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Size(max = 255)
    @Column(name = "razao_social")
    private String razaoSocial;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 255)
    @Column(name = "nome_fantasia")
    private String nomeFantasia;
    @Size(max = 20)
    @Column(name = "telefone")
    private String telefone;
    // @Pattern(regexp="^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$", message="Invalid phone/fax format, should be as xxx-xxx-xxxx")//if the field contains phone or fax number consider using this annotation to enforce field validation
    @Size(max = 20)
    @Column(name = "fax")
    private String fax;
    // @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")//if the field contains email address consider using this annotation to enforce field validation
    @Size(max = 50)
    @Column(name = "email")
    private String email;
    @Size(max = 255)
    @Column(name = "endereco")
    private String endereco;
    @JoinColumn(name = "municipio_ibge_id", referencedColumnName = "id")
    @ManyToOne
    private MunicipioIbge municipioIbge;
	
	 ... Getter e Setter

2 - Crie uma API, utilizando SPRING BOOT, com a seguinte caracteristicas :

  • No POM, inclui a dependencia do Projeto XXXX

    <dependency>
      	<groupId>br.com.xxxxxx</groupId>
      	<artifactId>xxxxxxx-model</artifactId>
      	<version>0.4</version>
      </dependency>
    

Segue abaixo a minha entidade :

@Entity
@Table(name = "cartao")
public class Cartao implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -7332367273991883359L;

	@Id
	@SequenceGenerator(name = "cartao_id", sequenceName = "cartao_seq", initialValue = 1, allocationSize = 1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "cartao_id")
	private Long id;
	
	 @Column
	private String descricao;
	 
	@JoinColumn(name = "empresa_id", referencedColumnName = "id")
	@ManyToOne(optional = false)
	private Empresa empresa;
	
 ... Getter e Setter
  • Tenho o arquivo application.properties, configurado o banco de dados
    Porém quando executo meu projeto spring Boot , esta dando erro abaixo

Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.xx.Cartao.empresa references an unknown entity: br.xxx.model.cadastro.Empresa
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:97) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processEndOfQueue(InFlightMetadataCollectorImpl.java:1827) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processFkSecondPassesInOrder(InFlightMetadataCollectorImpl.java:1771) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1658) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:287) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:904) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:935) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) ~[spring-orm-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390) ~[spring-orm-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:377) ~[spring-orm-5.1.3.RELEASE.jar:5.1.3.RELEASE]

Coloca também o persistence.xml, pois pode ser algo na configuração da Entidade lá.

@Adriano_si, como eu faço para o Spring Boot identificar esse persistence.xml ??

Hum. Como você está usando o Spring Boot, acho que se estiver com o Spring Data JPA Starter no pom, não precisa nem de persisrtence.xml… Mas, não tenho certeza porque faz tempo que não crio projeto do 0 com Spring Boot e JPA. Vou verificar aqui e já lhe confirmo.

Reveja essa dependência no seu pom. O projeto xxxxxx-model é o que contém os models dentro dele e nada mais?

EDIT: havia falado do optional, mas esqueça, ele não está interferindo nisso.

Adriano,

tem apenas os models e tem um arquivo persistence.xml, incluindo nele o caminho das classes.