Search code examples
javamysqlspring-bootentityentitymanagerfactory

Invocation of init method failed;nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property:


I have an error.

package com.application.model;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import com.fasterxml.jackson.annotation.JsonBackReference;

import lombok.Data;
import lombok.ToString;

@ToString
@Data
@Entity
@Table(name="dipendente", schema="negozio")
public class Dipendente {

    public Dipendente() {};
    public Dipendente(Long id, String nome, String cognome, Integer eta, Integer annoAssunzione, 
            Integer oreContratto, Date dataDiNascita, Gender gender, Azienda aziendaId) {
        this.id = id;
        this.nome = nome;
        this.cognome = cognome;
        this.eta = eta;
        this.annoAssunzione = annoAssunzione;
        this.oreContratto = oreContratto;
        this.dataDiNascita = dataDiNascita;
        this.gender = gender;
        this.aziendaId = aziendaId;
    }
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id;
    
    @Column(nullable = true, name = "nome", length=50)
    private String nome;
    
    @Column(nullable = true, name = "cognome")
    private String cognome;
    
    @Column(nullable = true, name = "eta")
    private Integer eta;
    
    @Column(nullable = true, name = "anno_assunzione")
    private Integer annoAssunzione;
    
    @Column(nullable = true, name = "ore_contratto")
    private Integer oreContratto;
    
    @Temporal(TemporalType.DATE)
    @Column(nullable = true, name = "data_di_nascita")
    private Date dataDiNascita;
    
    @Enumerated(EnumType.STRING)
    @Column(nullable = true, name = "gender")
    private Gender gender;
    
    @ManyToOne(fetch = FetchType.LAZY,targetEntity = Azienda.class, cascade = CascadeType.MERGE) 
    @JoinColumn(name = "azienda_id") 
    @JsonBackReference
    private Azienda aziendaId;

package com.application.model;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonManagedReference;
import lombok.ToString;

@ToString

@Entity

@Table(name="azienda", schema="negozio")
public class Azienda {

    public Azienda () {}
    public Azienda (Long idAzienda, String nomeAzienda, String sedeAzienda) {
        this.idAzienda = idAzienda;
        this.nomeAzienda = nomeAzienda;
        this.sedeAzienda = sedeAzienda;
    }
    
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long idAzienda;
    
    @Column(nullable = true, name = "nome_azienda")
    private String nomeAzienda;
    
    @Column(nullable = true, name = "sede_azienda")
    private String sedeAzienda;
    
        @OneToMany(mappedBy="azienda_id",targetEntity=Dipendente.class,fetch=FetchType.LAZY,
        cascade=CascadeType.ALL)
    @JsonManagedReference
    private Set <Dipendente> listaDipendenti = new HashSet<>(); 
    
    public Long getIdAzienda() {
        return idAzienda;
    }
    public void setId_azienda(Long idAzienda) {
        this.idAzienda = idAzienda;
    }
    public String getNomeAzienda() {
        return nomeAzienda;
    }
    public void setNomeAzienda(String nomeAzienda) {
        this.nomeAzienda = nomeAzienda;
    }
    public String getSedeAzienda() {
        return sedeAzienda;
    }
    public void setSedeAzienda(String sedeAzienda) {
        this.sedeAzienda = sedeAzienda;
    }
    
        public Set<Dipendente> getListaDipendenti() {
          return listaDipendenti;
        }
        public void setListaDipendenti(Set<Dipendente> listaDipendenti) {
          this.listaDipendenti = listaDipendenti;
        }

}

THIS IS MY ERROR :

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: mappedBy reference an unknown target entity property: com.application.model.Dipendente.azienda_id in com.application.model.Azienda.listaDipendenti

The program worked, after a week of my absence it started giving me these errors that I can't solve


Solution

  • @OneToMany(mappedBy="azienda_id",targetEntity=Dipendente.class,fetch=FetchType.LAZY,
                cascade=CascadeType.ALL)
    

    has to be changed to

    @OneToMany(mappedBy="aziendaId",targetEntity=Dipendente.class,fetch=FetchType.LAZY,
            cascade=CascadeType.ALL)
    

    because you reference the property name not the column name.