直接入题
     我使用 hibernate 保存一个 node , node 关联 build
     代码片段
     
@Entity
@Table(name = "tb_node" , uniqueConstraints = {@UniqueConstraint(columnNames = {"node_name"})})
public class Node implements Serializable { private static final long serialVersionUID = 5739459432161066845L;

private Long id;
private Building build;
        。 @ManyToOne(fetch = FetchType.LAZY,cascade={CascadeType.MERGE,CascadeType.REFRESH})
@JoinColumn(name = "build_id", nullable = false)
public Building getBuild() {
return build;
}

public void setBuild(Building build) {
this.build = build;
}
     
   
当我添加Node之后 
dao.save(node);
List<RuleIndex> indexlst = getNodeParam(node);
if(indexlst != null){
 addDefaultRule(node , indexlst);
}
node.setBuild(b_dao.get(node.getBuild().getId()));
dao.createNodeDataTable(node); build 信息只有 id
我必须去手动载入 build 信息, 很是奇怪  延迟加载在这里没有用 既然我保存了Node 这个node也是持久态了 如何直接使用build 就是不行 , 不过我想 肯定是我有知识点还不知道 我想如何在这里使用延迟加载我使用了opensessioninviewfilter 这个就不说了 waiting for you

解决方案 »

  1.   

     可能我说的不是太清楚 我说我 不去手动加载 build 信息 ,而是用 session 延迟加载 node.getBuilding().getName() 直接可以使用 (如果我不去手动加载building 信息 我是没办法直接使用的) , 我debug 调试了  Session 也没有关闭 奇怪为什么用不了延迟加载
      

  2.   

    在web.xml里配置一个OpenSessionInViewFilter,试试<filter>
    <filter-name>openSessionInView</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    <init-param>
    <param-name>sessionFactoryBeanName</param-name>
    <param-value>sf</param-value>
    </init-param>
    </filter>

    <filter-mapping>
    <filter-name>openSessionInView</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  3.   

     补充问题 : 还有一个现象 我使用 Hibernate.initialize(Node.getBuilding()) 我叉 , 他也加载不出来 , 我只能手动查询 node.setBuild(b_dao.get(node.getBuild().getId()));  见鬼了, 配置文件也在上面 各位帮我看看