lazy设置成proxy 是默认行为
其他的就不清楚了
其他的就不清楚了
解决方案 »
- 请教:如何实现Oracle主键自增
- 急急呀,借人气求救,装solaris系统出现grub提示符怎么解决呢?
- javascript 或 vbscript 操作 word2003菜单方法
- eclipse怎么调试部署在weblogic受管理服务的程序
- xfire 开发webservice 当服务的参数和返回式都是javabean 时的问题,牛人进哈
- 我用ireport设计好报表了,怎么将.jrxml的文件编译成.jasper的呢?
- junit测试的方法调用了JNDI,总是出错......
- JAVA有没有类似MSDN那样的帮助文档?
- EJB 容器 的问题还是 开发使用的问题 ----------- 指教. wait online
- 关于deploy ejb-jar
- TOMCAT启动错误
- struts2中拦截器 怎样设置例外情况
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
试试不过不一定保证行的,还要看集成环境,LZ是否同时还在用着struts?struts1.x跟2.x配置又不太一样如果只是测试hp环境,可以手动flush下
hibernate3 many-to-one的默认选项是 lazy = "proxy"
解决方法:
<many-to-one> & <one-to-many> 中设置 lazy="false"
lazy="false"非延迟
lazy="true"
session控制的问题
有4种解决方案 楼主不妨试一下
这个我也遇到过
1. connection_commit; 在hibernate.cfg.xml中
加入自动提交
<property name="connection.autocommit">true</property>2.回调 在你的方法中写
return (Serializable) getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Hibernate.initialize();
return null;
}});
3
web.xml原始配置:
<!-- 过滤spring中对于hibernate的session关闭管理 -->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
4 还有一个在spring事物中定义 但我没有试过
lazy="false" 将对象的所有属性查询出来一次性组装上,效率低
lazy=true是用的时候才去加载
lazy=false是不使用延迟加载,即实时加载若使用延迟加载,普通的session在关闭调用数据库的方法后会自动关闭,这个时候无法获取关联数据。使用OpenSessionInViewFilter后,在调用数据库方法关闭后session并不是立刻关闭,而是一直到当前request请求完成(即从页面请求到action或servlet,再操作数据库,最后返回结果到页面显示出来)才关闭session。
集合(不包括数组)是可以延迟初始化的,意思是仅仅当应用程序需要访问时,才载入他们的值。
s = sessions.openSession();
User u = (User) s.find("from User u where u.name=?", userName,
Hibernate.STRING).get(0);
Map permissions = u.getPermissions();
s.connection().commit();
s.close();
Integer accessLevel = (Integer) permissions.get("accounts"); //Error!
因为在commit之前,permissions没有被用到,permission没有被初始化,而session被close了,导致permissions永远都无法load data.
解决办法:吧最后一行一道session被提交之前.
设置:
<set name="names" table="NAMES" lazy="true" order-by="name asc">
<key column="group_id"/>
<element column="NAME" type="string"/>
</set>==================================在做Spring1.2 + Hibernate 3 + struts demo时候遇到一个问题,编辑用户数据时候用com.jeedev.service.dao.hibernate.UserHibernateDao 中 public TSysuser getUser(int userid) { } 方法,总是不能正常显示编辑数据。具体表现为:参考 com.jeedev.service.dao.hibernate.UserHibernateDao 第32-45行 java代码:
public TSysuser getUser(int userid) { if (this.getHibernateTemplate() == null) {
System.out.println("error at there");
return null;
} TSysuser edituser= (TSysuser) getHibernateTemplate().load(TSysuser.class, new Integer(userid)); System.out.println(edituser.getUsername());
System.out.println(edituser.getDeptno()); return edituser;
}
如果删除上面的
java代码:
System.out.println(edituser.getUsername());
System.out.println(edituser.getDeptno());在点击编号,修改时候就会出现错误: 2005-10-27 15:35:59,245 ERROR [org.hibernate.LazyInitializationException] - could not initialize proxy - the owning Session was closed
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed 经过在javaeye论坛大家一致认为 是hibernate lazy的原因在WEB级别应用时候,会出现意想不到的lazy错误,解决方法就是 设置 lazy="false" 例:<hibernate-mapping> <class name="com.jeedev.hb.TSysuser" table="t_sysuser" lazy="false">Copy from others.
应该是你的问题解答
Both are ZT. :)