江湖救急,各位大侠帮帮忙!JUnit测试延迟加载抛异常:LazyInitializationException:no Session
hibernate查询关联属性报错,查找某student的class时发生以上情景
//JUnit
@Test
public void test4Lazy(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
StudentService studentService = (StudentService)context.getBean("studentService");
Student stu=studentService.getStudentById(1);
System.out.println();
Clazz clazz=stu.getClazz();
System.out.println(clazz.getName());
}
//班级类
@Entity
@Table(name="t_class")
public class Clazz {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
。。。
}
//学生类
@Entity
@Table(name="t_student")
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private Integer no;
private String name;
private String sex;
@ManyToOne(fetch=FetchType.LAZY)//使用延迟加载
@JoinColumn(name="class_id")
private Clazz clazz;
。。。
}
//学生dao
@Repository("studentDao")
public class StudentDaoImpl extends BaseDao implements StudentDao {
public Student findStudentById(final Integer id){
Student stu=(Student) this.hibernateTemplate.get(Student.class, id);
System.out.println();
return stu;
}
}
//学生service
@Component("studentService")
public class StudentServiceImpl implements StudentService {
@Resource(name="studentDao")
private StudentDao studentDao;
public Student getStudentById(Integer id){
Student stu=this.studentDao.findStudentById(id);
//DEBUG - Closing Hibernate Session
System.out.println();
return stu;
}
。。。
}
//beans.xml事务部分
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="add*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="dao" expression="execution(public * com.smonk.menu.dao.*.*(..))" />
<aop:advisor pointcut-ref="dao" advice-ref="txAdvice" />
</aop:config>
//----------------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------
clazz为student的关联属性,使用延迟加载
JUnit测试时抛异常:
ERROR - could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
请问如何扩大session的生命周期?
session在dao执行完成后关闭,同时事务也关闭了
请问可以使用@PersistenceContext扩大session范围吗?
LIE也算是hibernate的一大顽疾,希望各位大侠能够给点建设性意见!
资料我也查了,试了都不行,希望大家不要轻易Ctrl+V!
谢谢!