Search code examples
javasqlspringjpahibernate-mapping

referenced property unknown when doing JPA One-to-One


I have these 2 entities, where I want to map @OneToOne in a SQL database using when doing JPA One-to-One ( exactly one record in a table that corresponds to exactly one record in a related table)

Here how I create the @OneToOne relationship

@Entity
@Table(name = "IMP_Radio")
@NamedQuery(name = "ImpactRadio.findAll", query = "SELECT ia FROM ImpactRadio ia ")
public class ImpactRadio implements Serializable, IEntity<String> {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ID")
    private String id;

    @OneToOne(mappedBy = "impactRadio", fetch = FetchType.EAGER)
    @JoinColumn(name = "IA_ID")
    private ImpactRadioAmendment amendments;

    @OneToOne(mappedBy = "impactRadio", fetch = FetchType.EAGER)
    @JoinColumn(name = "IA_ID")
    private ImpactRadioExamination examinations;


}




@Entity
@Table(name = "IMP_Radio_EXAMINATION")
public class ImpactRadioExamination implements Serializable, IEntity<String> {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ID")
    private String id;

    @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
    @JoinColumn(name = "IA_ID")
    private ImpactRadio ImpactRadio;

}


But I have an exception when I try to run a Junit test
Caused by: org.hibernate.AnnotationException: 
Unknown mappedBy in: com.tdk.persistence.fire.model.ImpactRadio.examinations, 
referenced property unknown: com.tdk.persistence.fire.model.ImpactRadioExamination.impactRadio

Solution

  • It's because here you need to pass field name:

    @OneToOne(mappedBy = "impactRadio", fetch = FetchType.EAGER)
    @JoinColumn(name = "IA_ID")
    private ImpactRadioAmendment amendments;
    
    @OneToOne(mappedBy = "impactRadio", fetch = FetchType.EAGER)
    @JoinColumn(name = "IA_ID")
    private ImpactRadioExamination examinations;
    

    Whereas the real field is uppercase:

    @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
    @JoinColumn(name = "IA_ID")
    private ImpactRadio ImpactRadio;
    

    Rename ImpactRadio to impactRadio.