使用JSTL迭代带有外键的列表

时间:2017-08-21 15:15:15

标签: java jsp jstl

我的数据库August 10, 2017Compte中有两个表。在Respnsable表中,我有一个外键列" Compte"。我想要做的是在jsp页面的compte表中显示Responsable的名字。

responsable

我有这个错误:

  

javax.el.E​​LException:在类型上读取[name]时出错   [co.ma.entity.Responsable $$ EnhancerByCGLIB $$ 5949c96e]

Class Compte:

<c:forEach items="${lescompte}" var="compt">
                        <tr>
                            <td>${compt.idCompte}</td>
                            <td>${compt.responsable.name}</td>
                        </tr>
</c:forEach>

课程负责人:

package co.ma.entity;
// Generated 10 août 2017 21:09:03 by Hibernate Tools 5.2.3.Final

import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * Compte generated by hbm2java
 */
@Entity
@Table(name = "compte", catalog = "topic")
public class Compte implements java.io.Serializable {

    private Integer idCompte;
    private Responsable responsable;
    private Set<Contact> contacts = new HashSet<Contact>(0);

    public Compte() {
    }

    public Compte(Responsable responsable) {
        this.responsable = responsable;
    }

    public Compte(Responsable responsable, Set<Contact> contacts) {
        this.responsable = responsable;
        this.contacts = contacts;
    }

    @Id
    @GeneratedValue(strategy = IDENTITY)

    @Column(name = "Id_Compte", unique = true, nullable = false)
    public Integer getIdCompte() {
        return this.idCompte;
    }

    public void setIdCompte(Integer idCompte) {
        this.idCompte = idCompte;
    }


    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "Id_Respo", nullable = false)
    public Responsable getResponsable() {
        return this.responsable;
    }

    public void setResponsable(Responsable responsable) {
        this.responsable = responsable;
    }
}

1 个答案:

答案 0 :(得分:0)

错误的原因是您尝试从不存在的外键name访问responsable属性。记住外键只是传递给“值”,而不是“表”本身。

如果外键responsable已经是您要显示的名称,则只需删除.name

否则,您可能需要另一个forEach来匹配responsable表中的compte列到Respnsable表。它可能看起来像这样:

<c:forEach items="${lescompte}" var="compt">
       <tr>
           <td>${compt.idCompte}</td>
           <c:forEach items="${nameOfResponsableTable}" var="resp">
               <c:if test="${compt.responsable == resp.valueToCompare}">
                   <td>${resp.name}</td>
               </c:if>
           </c:forEach>
       </tr>
</c:forEach>

我希望我能很好地理解你的问题,希望这会有所帮助! :)