org.hibernate.AnnotationException: Unknown mappedBy in ... referenced property unknown

Do Nhu Vy Source

I use Spring Boot 2.0.0.RC1, Hibernate latest version. File persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">
    <persistence-unit name="vy">
        <class>com.donhuvy.entity.SysReportLayoutUserApply</class>
        <class>com.donhuvy.entity.SysReportList</class>
        <properties>
            <property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
            <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
        </properties>
    </persistence-unit>
</persistence>

File SysReportLayoutUserApply.java

package com.donhuvy.entity;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import java.util.Objects;

@Entity
@Table(name = "SYS_REPORT_LAYOUT_USER_APPLY", schema = "ACCOUNTING", catalog = "")
public class SysReportLayoutUserApply {

    private long reportId;
    private Long userId;
    private SysReportLayoutConfig sysReportLayoutConfigByLayoutId;

    @Id
    @Column(name = "REPORT_ID", nullable = false, precision = 0)
    public long getReportId() {
        return reportId;
    }

    public void setReportId(long reportId) {
        this.reportId = reportId;
    }

    @Basic
    @Column(name = "USER_ID", nullable = true, precision = 0)
    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        SysReportLayoutUserApply that = (SysReportLayoutUserApply) o;
        return reportId == that.reportId &&
                Objects.equals(userId, that.userId);
    }

    @Override
    public int hashCode() {

        return Objects.hash(reportId, userId);
    }

    @ManyToOne
    @JoinColumn(name = "LAYOUT_ID", referencedColumnName = "LAYOUT_ID")
    public SysReportLayoutConfig getSysReportLayoutConfigByLayoutId() {
        return sysReportLayoutConfigByLayoutId;
    }

    public void setSysReportLayoutConfigByLayoutId(SysReportLayoutConfig sysReportLayoutConfigByLayoutId) {
        this.sysReportLayoutConfigByLayoutId = sysReportLayoutConfigByLayoutId;
    }
}

File SysReportList.java

package com.donhuvy.entity;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import java.sql.Timestamp;
import java.util.Objects;

@Entity
@Table(name = "SYS_REPORT_LIST", schema = "ACCOUNTING", catalog = "")
public class SysReportList {


    private long reportId;
    private String reportName;
    private String reportName48;
    private String reportFile;
    private String functionReportName;
    private String procedureName;
    private String parameterFormName;
    private String parameterUserControl;
    private String reportViewer;
    private String refTypeList;
    private Byte sortOrder;
    private byte accountingSystem;
    private Long branchId;
    private String description;
    private String formNo;
    private String formNo48;
    private Timestamp lastViewDate;
    private String tableName;
    private Boolean isBeta;
    private boolean isInvoice;
    private boolean isSystem;
    private boolean isShow;
    private Boolean isNotPrintSummary;
    private Byte invTypeId;
    private Boolean isPrintLineNumber;
    private byte reportType;
    private Byte reportStyle;
    private String parentId;
    private String reportDetailName;
    private String linkToReportDetail;
    private Byte invMethod;
    private boolean isParent;
    private Byte refTypeCategory;
    private Timestamp createDate;
    private String reportTitle;
    private String listParameter;
    private String reportNameEnglish;
    private String reportNameEnglish48;
    private Byte showTotalPageNumber;
    private String tableNameExport;
    private String reportName133;
    private String reportNameEnglish133;
    private String formNo133;
    private SysReportLayoutUserApply sysReportLayoutUserApplyByReportId;
    private SysReportGroup sysReportGroupByGroupId;

    @Id
    @Column(name = "REPORT_ID", nullable = false, precision = 0)
    public long getReportId() {
        return reportId;
    }

    public void setReportId(long reportId) {
        this.reportId = reportId;
    }

    @Basic
    @Column(name = "REPORT_NAME", nullable = true, length = 256)
    public String getReportName() {
        return reportName;
    }

    public void setReportName(String reportName) {
        this.reportName = reportName;
    }

    @Basic
    @Column(name = "REPORT_NAME_48", nullable = true, length = 256)
    public String getReportName48() {
        return reportName48;
    }

    public void setReportName48(String reportName48) {
        this.reportName48 = reportName48;
    }

    @Basic
    @Column(name = "REPORT_FILE", nullable = true, length = 100)
    public String getReportFile() {
        return reportFile;
    }

    public void setReportFile(String reportFile) {
        this.reportFile = reportFile;
    }

    @Basic
    @Column(name = "FUNCTION_REPORT_NAME", nullable = true, length = 128)
    public String getFunctionReportName() {
        return functionReportName;
    }

    public void setFunctionReportName(String functionReportName) {
        this.functionReportName = functionReportName;
    }

    @Basic
    @Column(name = "PROCEDURE_NAME", nullable = true, length = 128)
    public String getProcedureName() {
        return procedureName;
    }

    public void setProcedureName(String procedureName) {
        this.procedureName = procedureName;
    }

    @Basic
    @Column(name = "PARAMETER_FORM_NAME", nullable = true, length = 128)
    public String getParameterFormName() {
        return parameterFormName;
    }

    public void setParameterFormName(String parameterFormName) {
        this.parameterFormName = parameterFormName;
    }

    @Basic
    @Column(name = "PARAMETER_USER_CONTROL", nullable = true, length = 128)
    public String getParameterUserControl() {
        return parameterUserControl;
    }

    public void setParameterUserControl(String parameterUserControl) {
        this.parameterUserControl = parameterUserControl;
    }

    @Basic
    @Column(name = "REPORT_VIEWER", nullable = true, length = 128)
    public String getReportViewer() {
        return reportViewer;
    }

    public void setReportViewer(String reportViewer) {
        this.reportViewer = reportViewer;
    }

    @Basic
    @Column(name = "REF_TYPE_LIST", nullable = false, length = 700)
    public String getRefTypeList() {
        return refTypeList;
    }

    public void setRefTypeList(String refTypeList) {
        this.refTypeList = refTypeList;
    }

    @Basic
    @Column(name = "SORT_ORDER", nullable = true, precision = 0)
    public Byte getSortOrder() {
        return sortOrder;
    }

    public void setSortOrder(Byte sortOrder) {
        this.sortOrder = sortOrder;
    }

    @Basic
    @Column(name = "ACCOUNTING_SYSTEM", nullable = false, precision = 0)
    public byte getAccountingSystem() {
        return accountingSystem;
    }

    public void setAccountingSystem(byte accountingSystem) {
        this.accountingSystem = accountingSystem;
    }

    @Basic
    @Column(name = "BRANCH_ID", nullable = true, precision = 0)
    public Long getBranchId() {
        return branchId;
    }

    public void setBranchId(Long branchId) {
        this.branchId = branchId;
    }

    @Basic
    @Column(name = "DESCRIPTION", nullable = true, length = 256)
    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Basic
    @Column(name = "FORM_NO", nullable = true, length = 128)
    public String getFormNo() {
        return formNo;
    }

    public void setFormNo(String formNo) {
        this.formNo = formNo;
    }

    @Basic
    @Column(name = "FORM_NO_48", nullable = true, length = 128)
    public String getFormNo48() {
        return formNo48;
    }

    public void setFormNo48(String formNo48) {
        this.formNo48 = formNo48;
    }

    @Basic
    @Column(name = "LAST_VIEW_DATE", nullable = true)
    public Timestamp getLastViewDate() {
        return lastViewDate;
    }

    public void setLastViewDate(Timestamp lastViewDate) {
        this.lastViewDate = lastViewDate;
    }

    @Basic
    @Column(name = "TABLE_NAME", nullable = true, length = 1024)
    public String getTableName() {
        return tableName;
    }

    public void setTableName(String tableName) {
        this.tableName = tableName;
    }

    @Basic
    @Column(name = "IS_BETA", nullable = true, precision = 0)
    public Boolean getBeta() {
        return isBeta;
    }

    public void setBeta(Boolean beta) {
        isBeta = beta;
    }

    @Basic
    @Column(name = "IS_INVOICE", nullable = false, precision = 0)
    public boolean isInvoice() {
        return isInvoice;
    }

    public void setInvoice(boolean invoice) {
        isInvoice = invoice;
    }

    @Basic
    @Column(name = "IS_SYSTEM", nullable = false, precision = 0)
    public boolean isSystem() {
        return isSystem;
    }

    public void setSystem(boolean system) {
        isSystem = system;
    }

    @Basic
    @Column(name = "IS_SHOW", nullable = false, precision = 0)
    public boolean isShow() {
        return isShow;
    }

    public void setShow(boolean show) {
        isShow = show;
    }

    @Basic
    @Column(name = "IS_NOT_PRINT_SUMMARY", nullable = true, precision = 0)
    public Boolean getNotPrintSummary() {
        return isNotPrintSummary;
    }

    public void setNotPrintSummary(Boolean notPrintSummary) {
        isNotPrintSummary = notPrintSummary;
    }

    @Basic
    @Column(name = "INV_TYPE_ID", nullable = true, precision = 0)
    public Byte getInvTypeId() {
        return invTypeId;
    }

    public void setInvTypeId(Byte invTypeId) {
        this.invTypeId = invTypeId;
    }

    @Basic
    @Column(name = "IS_PRINT_LINE_NUMBER", nullable = true, precision = 0)
    public Boolean getPrintLineNumber() {
        return isPrintLineNumber;
    }

    public void setPrintLineNumber(Boolean printLineNumber) {
        isPrintLineNumber = printLineNumber;
    }

    @Basic
    @Column(name = "REPORT_TYPE", nullable = false, precision = 0)
    public byte getReportType() {
        return reportType;
    }

    public void setReportType(byte reportType) {
        this.reportType = reportType;
    }

    @Basic
    @Column(name = "REPORT_STYLE", nullable = true, precision = 0)
    public Byte getReportStyle() {
        return reportStyle;
    }

    public void setReportStyle(Byte reportStyle) {
        this.reportStyle = reportStyle;
    }

    @Basic
    @Column(name = "PARENT_ID", nullable = true, length = 100)
    public String getParentId() {
        return parentId;
    }

    public void setParentId(String parentId) {
        this.parentId = parentId;
    }

    @Basic
    @Column(name = "REPORT_DETAIL_NAME", nullable = true, length = 256)
    public String getReportDetailName() {
        return reportDetailName;
    }

    public void setReportDetailName(String reportDetailName) {
        this.reportDetailName = reportDetailName;
    }

    @Basic
    @Column(name = "LINK_TO_REPORT_DETAIL", nullable = true, length = 1024)
    public String getLinkToReportDetail() {
        return linkToReportDetail;
    }

    public void setLinkToReportDetail(String linkToReportDetail) {
        this.linkToReportDetail = linkToReportDetail;
    }

    @Basic
    @Column(name = "INV_METHOD", nullable = true, precision = 0)
    public Byte getInvMethod() {
        return invMethod;
    }

    public void setInvMethod(Byte invMethod) {
        this.invMethod = invMethod;
    }

    @Basic
    @Column(name = "IS_PARENT", nullable = false, precision = 0)
    public boolean isParent() {
        return isParent;
    }

    public void setParent(boolean parent) {
        isParent = parent;
    }

    @Basic
    @Column(name = "REF_TYPE_CATEGORY", nullable = true, precision = 0)
    public Byte getRefTypeCategory() {
        return refTypeCategory;
    }

    public void setRefTypeCategory(Byte refTypeCategory) {
        this.refTypeCategory = refTypeCategory;
    }

    @Basic
    @Column(name = "CREATE_DATE", nullable = true)
    public Timestamp getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Timestamp createDate) {
        this.createDate = createDate;
    }

    @Basic
    @Column(name = "REPORT_TITLE", nullable = true, length = 256)
    public String getReportTitle() {
        return reportTitle;
    }

    public void setReportTitle(String reportTitle) {
        this.reportTitle = reportTitle;
    }

    @Basic
    @Column(name = "LIST_PARAMETER", nullable = true, length = 1024)
    public String getListParameter() {
        return listParameter;
    }

    public void setListParameter(String listParameter) {
        this.listParameter = listParameter;
    }

    @Basic
    @Column(name = "REPORT_NAME_ENGLISH", nullable = true, length = 256)
    public String getReportNameEnglish() {
        return reportNameEnglish;
    }

    public void setReportNameEnglish(String reportNameEnglish) {
        this.reportNameEnglish = reportNameEnglish;
    }

    @Basic
    @Column(name = "REPORT_NAME_ENGLISH_48", nullable = true, length = 256)
    public String getReportNameEnglish48() {
        return reportNameEnglish48;
    }

    public void setReportNameEnglish48(String reportNameEnglish48) {
        this.reportNameEnglish48 = reportNameEnglish48;
    }

    @Basic
    @Column(name = "SHOW_TOTAL_PAGE_NUMBER", nullable = true, precision = 0)
    public Byte getShowTotalPageNumber() {
        return showTotalPageNumber;
    }

    public void setShowTotalPageNumber(Byte showTotalPageNumber) {
        this.showTotalPageNumber = showTotalPageNumber;
    }

    @Basic
    @Column(name = "TABLE_NAME_EXPORT", nullable = true, length = 20)
    public String getTableNameExport() {
        return tableNameExport;
    }

    public void setTableNameExport(String tableNameExport) {
        this.tableNameExport = tableNameExport;
    }

    @Basic
    @Column(name = "REPORT_NAME_133", nullable = true, length = 256)
    public String getReportName133() {
        return reportName133;
    }

    public void setReportName133(String reportName133) {
        this.reportName133 = reportName133;
    }

    @Basic
    @Column(name = "REPORT_NAME_ENGLISH_133", nullable = true, length = 256)
    public String getReportNameEnglish133() {
        return reportNameEnglish133;
    }

    public void setReportNameEnglish133(String reportNameEnglish133) {
        this.reportNameEnglish133 = reportNameEnglish133;
    }

    @Basic
    @Column(name = "FORM_NO_133", nullable = true, length = 128)
    public String getFormNo133() {
        return formNo133;
    }

    public void setFormNo133(String formNo133) {
        this.formNo133 = formNo133;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        SysReportList that = (SysReportList) o;
        return reportId == that.reportId &&
                accountingSystem == that.accountingSystem &&
                isInvoice == that.isInvoice &&
                isSystem == that.isSystem &&
                isShow == that.isShow &&
                reportType == that.reportType &&
                isParent == that.isParent &&
                Objects.equals(reportName, that.reportName) &&
                Objects.equals(reportName48, that.reportName48) &&
                Objects.equals(reportFile, that.reportFile) &&
                Objects.equals(functionReportName, that.functionReportName) &&
                Objects.equals(procedureName, that.procedureName) &&
                Objects.equals(parameterFormName, that.parameterFormName) &&
                Objects.equals(parameterUserControl, that.parameterUserControl) &&
                Objects.equals(reportViewer, that.reportViewer) &&
                Objects.equals(refTypeList, that.refTypeList) &&
                Objects.equals(sortOrder, that.sortOrder) &&
                Objects.equals(branchId, that.branchId) &&
                Objects.equals(description, that.description) &&
                Objects.equals(formNo, that.formNo) &&
                Objects.equals(formNo48, that.formNo48) &&
                Objects.equals(lastViewDate, that.lastViewDate) &&
                Objects.equals(tableName, that.tableName) &&
                Objects.equals(isBeta, that.isBeta) &&
                Objects.equals(isNotPrintSummary, that.isNotPrintSummary) &&
                Objects.equals(invTypeId, that.invTypeId) &&
                Objects.equals(isPrintLineNumber, that.isPrintLineNumber) &&
                Objects.equals(reportStyle, that.reportStyle) &&
                Objects.equals(parentId, that.parentId) &&
                Objects.equals(reportDetailName, that.reportDetailName) &&
                Objects.equals(linkToReportDetail, that.linkToReportDetail) &&
                Objects.equals(invMethod, that.invMethod) &&
                Objects.equals(refTypeCategory, that.refTypeCategory) &&
                Objects.equals(createDate, that.createDate) &&
                Objects.equals(reportTitle, that.reportTitle) &&
                Objects.equals(listParameter, that.listParameter) &&
                Objects.equals(reportNameEnglish, that.reportNameEnglish) &&
                Objects.equals(reportNameEnglish48, that.reportNameEnglish48) &&
                Objects.equals(showTotalPageNumber, that.showTotalPageNumber) &&
                Objects.equals(tableNameExport, that.tableNameExport) &&
                Objects.equals(reportName133, that.reportName133) &&
                Objects.equals(reportNameEnglish133, that.reportNameEnglish133) &&
                Objects.equals(formNo133, that.formNo133);
    }

    @Override
    public int hashCode() {

        return Objects.hash(reportId, reportName, reportName48, reportFile, functionReportName, procedureName, parameterFormName, parameterUserControl, reportViewer, refTypeList, sortOrder, accountingSystem, branchId, description, formNo, formNo48, lastViewDate, tableName, isBeta, isInvoice, isSystem, isShow, isNotPrintSummary, invTypeId, isPrintLineNumber, reportType, reportStyle, parentId, reportDetailName, linkToReportDetail, invMethod, isParent, refTypeCategory, createDate, reportTitle, listParameter, reportNameEnglish, reportNameEnglish48, showTotalPageNumber, tableNameExport, reportName133, reportNameEnglish133, formNo133);
    }

    @OneToOne(mappedBy = "sysReportListByReportId")
    public SysReportLayoutUserApply getSysReportLayoutUserApplyByReportId() {
        return sysReportLayoutUserApplyByReportId;
    }

    public void setSysReportLayoutUserApplyByReportId(SysReportLayoutUserApply sysReportLayoutUserApplyByReportId) {
        this.sysReportLayoutUserApplyByReportId = sysReportLayoutUserApplyByReportId;
    }

    @ManyToOne
    @JoinColumn(name = "GROUP_ID", referencedColumnName = "GROUP_ID")
    public SysReportGroup getSysReportGroupByGroupId() {
        return sysReportGroupByGroupId;
    }

    public void setSysReportGroupByGroupId(SysReportGroup sysReportGroupByGroupId) {
        this.sysReportGroupByGroupId = sysReportGroupByGroupId;
    }
}

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: Unknown mappedBy in: com.donhuvy.entity.SysReportList.sysReportLayoutUserApplyByReportId, referenced property unknown: com.donhuvy.entity.SysReportLayoutUserApply.sysReportListByReportId

How to fix it?

javahibernatejpaspring-boot

Answers

answered 5 days ago cagridursun #1

mappedBy attribute doesnt exactly match in this method

 @OneToOne(mappedBy = "sysReportListByReportId")
    public SysReportLayoutUserApply getSysReportLayoutUserApplyByReportId() {
        return sysReportLayoutUserApplyByReportId;
    }

this attribute value should be exactly same the referenced class object such as sysReportLayoutConfigByLayoutId

Check the example in below

Model.java referenced Brand class with @ManyToOne with "brand_id"

public class Model {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column(name = "model_name")
    private String name;

    @JsonIgnore
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "brand_id")
    private Brand brand;
 }

Brand.java referenced Model class with mappedBy with brand value which is exactly same variable name from Model class

public class Brand {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column(name = "brand_name")
    private String name;

    @JsonIgnore
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "brand")
    private Set<Model> models;

}

comments powered by Disqus