有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java MappedBy引用未知目标实体属性两次?

我有一个查询,我碰巧有一个名为“SGOrdCompra”的表,它将他与一个“SGPersona”链接了两次,表如下:

Sgordcompra。java

@Entity
@Table(name = "`SGOrdCompra`", schema = "`public`")
public class Sgordcompra implements java.io.Serializable {

    .....
    private Sgpersona sgpersonaByIcodSolicitante;
    private Sgpersona sgpersonaByIcodComprador;


    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "`iCodSolicitante`", nullable = false)
    public Sgpersona getSgpersonaByIcodSolicitante() {
        return this.sgpersonaByIcodSolicitante;
    }

    public void setSgpersonaByIcodSolicitante(
            Sgpersona sgpersonaByIcodSolicitante) {
        this.sgpersonaByIcodSolicitante = sgpersonaByIcodSolicitante;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "`iCodComprador`", nullable = false)
    public Sgpersona getSgpersonaByIcodComprador() {
        return this.sgpersonaByIcodComprador;
    }

    public void setSgpersonaByIcodComprador(Sgpersona sgpersonaByIcodComprador) {
        this.sgpersonaByIcodComprador = sgpersonaByIcodComprador;
    }

}

Sgpersona。java

@Entity
@Table(name = "`SGPersona`", schema = "`public`")
public class Sgpersona implements java.io.Serializable {

    private static final long serialVersionUID = 1L;
    private int icodPersona;
    private Set<Sgrencajchica> sgrencajchicas = new HashSet<Sgrencajchica>(0);
    ....
    private Set<Sgordcompra> sgordcomprasForIcodComprador = new HashSet<Sgordcompra>(0);    
    private Set<Sgordcompra> sgordcomprasForIcodSolicitante = new HashSet<Sgordcompra>(0);

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "sgpersona")
    public Set<Sgrencajchica> getSgrencajchicas() {
        return this.sgrencajchicas;
    }

    public void setSgrencajchicas(Set<Sgrencajchica> sgrencajchicas) {
        this.sgrencajchicas = sgrencajchicas;
    }

    .......

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "sgpersona")
    public Set<Sgordcompra> getSgordcomprasForIcodComprador() {
        return this.sgordcomprasForIcodComprador;
    }

    public void setSgordcomprasForIcodComprador(
            Set<Sgordcompra> sgordcomprasForIcodComprador) {
        this.sgordcomprasForIcodComprador = sgordcomprasForIcodComprador;
    }



    @OneToMany(fetch = FetchType.LAZY, mappedBy = "sgpersona")
    public Set<Sgordcompra> getSgordcomprasForIcodSolicitante() {
        return this.sgordcomprasForIcodSolicitante;
    }

    public void setSgordcomprasForIcodSolicitante(
            Set<Sgordcompra> sgordcomprasForIcodSolicitante) {
        this.sgordcomprasForIcodSolicitante = sgordcomprasForIcodSolicitante;
    }

}

我得到这个错误:

ERROR: org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'iGenericDao': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory org.sgkyros.common.dao.impl.GenericDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/application-context.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: org.sgkyros.common.entity.Sgordcompra.sgpersona in org.sgkyros.common.entity.Sgpersona.sgordcomprasForIcodComprador

但是,如果我对与“Sgpersona”类相关的代码行进行注释,那么测试它是否正常工作,是否应该

private Set<Sgordcompra> sgordcomprasForIcodComprador = new HashSet<Sgordcompra>(0);    
private Set<Sgordcompra> sgordcomprasForIcodSolicitante = new HashSet<Sgordcompra>(0);

共 (2) 个答案

  1. # 1 楼答案

    我认为你的问题出在斯格伦卡奇卡的课堂上。你需要有一个名为“sgpersona”的属性。发布你的Sgrencajchica课程的代码

  2. # 2 楼答案

    mappedBy属性试图引用类“Sgordcompra”中的无效属性“sgpersona”。OneToMany映射应按以下步骤进行:

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "sgpersonaByIcodComprador")
    public Set<Sgordcompra> getSgordcomprasForIcodComprador() {
        return this.sgordcomprasForIcodComprador;
    }
    
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "sgpersonaByIcodSolicitante")
    public Set<Sgordcompra> getSgordcomprasForIcodSolicitante() {
        return this.sgordcomprasForIcodSolicitante;
    }