jsp显示一对多的数据

SSH框架(Struct2+Spring3+Hivernate4)

有tel_type表(type,typename)\ tel_info(id,type,comName,comTel)

使用MyEclipse自动创建entity方式

public class TelType implements java.io.Serializable {
// Fields
private Integer id;
private Integer type;
private String typeName;
private Set<TelInfo> telInfos = new HashSet<TelInfo>(0);

//getset方法省略,注意下面fetch默认是 FetchType.LAZY,必须改成 FetchType.EAGER

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "telType" )
public Set<TelInfo> getTelInfos() {
return this.telInfos;
}

}

public class TelInfo implements java.io.Serializable {
// Fields
private Integer id;
private TelType telType;
private String companyName;
private String companyTel;

//省略getset方法

}

dao代码:

public List queryAll(){
List resultList = null;
session = getCurrentSession();
Query  query = session.createQuery("FROM TelType");
resultList = query.list();
return resultList;
}

action代码:

public String query() throws Exception
    {
TelService telService = (TelService)getBeanFromCurrentContext("TelService");
List<TelType> l = telService.queryAll();
getServletRequest().setAttribute("telPublicInfoList", l);
        return "query";
    }

jsp代码

 <s:iterator value="#request.telPublicInfoList" id="TelType">
            <th>
              <s:property value="#TelType.typeName"/>                    
            </th>
          <th>
            电话号码
            </th>
            <s:iterator value="#TelType.telInfos" id="telInfo">
         <tr>
              <td>
             <s:property  value="#telInfo.companyName" />
           </td>
           <td>
             <s:property  value="#telInfo.companyTel"/>
           </td>
          </tr>            
            </s:iterator>
          </s:iterator>


如果是EAGER,那么表示取出这条数据时,它关联的数据也同时取出放入内存中

如果是LAZY,那么取出这条数据时,它关联的数据并不取出来,在同一个session中,什么时候要用,就什么时候取(再次访问数据库)。

但是,在session外,就不能再取了。用EAGER时,因为在内存里,所以在session外也可以取。

 

一般只在一边设Eager,JPA接口默认为一对多为Lazy,多对一为Eager,但是Hibernate反向工程生成Entity时,多对一为Lazy,需要手动改为Eager


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值