无法使用 hibernate 的延时加载 想问一下 我直接 在 spring 注入 一个 bean 的Dao 在 一个 普通的类里 想使用这个dao 进行 延时加载数据 但是 老是说 session 关闭了....可以 使用这个 Dao 查询到 自身的属性 但是无法 加载 关联对象.......或者集合想问一下 如何解决这个问题呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 延时加载并不是缓存到本地,而是需要的时候才去数据库找。你在取数据之前关闭了session,当然会有问题了。 把异常和配置文件粘贴出来 console的信息业粘贴出来! <property name="connection.autocommit">true</property>如果是Hibernate的话, 上面的这个配置属性很重要! org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed异常信息.... 如果要用延迟加载,就要在session关闭之前,对延迟加载的对象进行手动初始化Hibernate.initialize(对象名);初始化完成以后再把session关闭 虽然说 使用 join 属性 可以 抓取 到数据但是 还是很不想用这个属性.....因为这样出来的数据 就不 唯一了不知道有没有其他的 使用 fetch="select"的方法 实现 类似于 OpenSessionInView 的效果呢 不知道你使用的Hibernate版本是什么,异常呢?里面是不是有Proxy这样的东西,说明是产生了代理 了。版本不同,状况不一样的。 在SESSION关闭之后调用了延迟加载的属性 有些人写了个过滤器就是在过滤开始的时候开启SESSION 过滤结束之后关闭SESSION 貌似能够解决这个问题http://blog.csdn.net/uciqxkj/archive/2008/09/20/2955469.aspx我并不知道你为什么用了延迟加载还去取属性 如果说东西分两头的话(一个需要延迟 一个不需要) 你可以在不需要延迟加载的地方使用JOIN语句我并不知道HIBERNATE有没有在SESSION中设置是否延迟加载的东西 如果没有真希望有一个.. get(class,serializable) 直接从数据库加载,不会延迟,直接运行sql语句。load(class,serizlizable)返回的是代理对象,等到真正用到对象的内容时才会发出sql语句---------@Test public void testLoad(){ Session session = sessionfactory.getCurrentSession(); session.beginTransaction(); Teacher t = (Teacher)session.load(Teacher.class, 1); session.getTransaction().commit();//关闭了session System.out.println(t.getName());//这里报错 } @Test public void testGet(){ Session session = sessionfactory.getCurrentSession(); session.beginTransaction(); Teacher t = (Teacher)session.get(Teacher.class, 1);//已经查询到了数据保存到了对象中 session.getTransaction().commit(); System.out.println(t.getName());//不会报错 }没看你怎么加载数据的。希望对你有帮助 配置文件**.hbm.xml中 lazy值设为false or 在关闭session前访问一下关联的对象 上上楼的session.getTransaction.Commit();是关闭了session? load() 还要用到事务? 8.30加班中......,求助 ireport 图形报表 三层结构的问题 java添加AD条目的问题 关于并发问题 哪位大侠有关于hotmail邮箱接收邮件的代码? MySQL能实现如下的功能吗? 初学者弱弱的问 在Weblogic 8.1中配置数据源以后,怎样才能调用数据源 不要直接使用jdbc了,使用jnix-mimi 大虾们没事进来看看! 给定一个ip地址,我要分别获取这个IP地址所在的省份、城市 错误 Application was not properly initialized at startup, could not find Factory:
你在取数据之前关闭了session,当然会有问题了。
console的信息业粘贴出来!
<property name="connection.autocommit">true</property>
如果是Hibernate的话, 上面的这个配置属性很重要!
的方法 实现 类似于 OpenSessionInView 的效果呢
在SESSION关闭之后调用了延迟加载的属性 有些人写了个过滤器就是在过滤开始的时候开启SESSION 过滤结束之后关闭SESSION 貌似能够解决这个问题
http://blog.csdn.net/uciqxkj/archive/2008/09/20/2955469.aspx我并不知道你为什么用了延迟加载还去取属性 如果说东西分两头的话(一个需要延迟 一个不需要) 你可以在不需要延迟加载的地方使用JOIN语句我并不知道HIBERNATE有没有在SESSION中设置是否延迟加载的东西 如果没有真希望有一个..
直接从数据库加载,不会延迟,直接运行sql语句。
load(class,serizlizable)
返回的是代理对象,等到真正用到对象的内容时才会发出sql语句---------
@Test
public void testLoad(){
Session session = sessionfactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher)session.load(Teacher.class, 1); session.getTransaction().commit();//关闭了session System.out.println(t.getName());//这里报错
}
@Test
public void testGet(){
Session session = sessionfactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher)session.get(Teacher.class, 1);//已经查询到了数据保存到了对象中 session.getTransaction().commit(); System.out.println(t.getName());//不会报错 }没看你怎么加载数据的。
希望对你有帮助
or 在关闭session前访问一下关联的对象