jsf - spring - hibernate の状況でトランザクションを管理する最良の方法を理解するのに苦労しています。私を手がかりにしたのは、次のエラーメッセージが表示されたことです。
failed to lazily initialize a collection of role: [class name], no session or session was closed
私のマネージドBeanはSpring Beanと呼ばれ、休止状態を使用するdaoを呼び出し、1対多の関係を持つコレクションを取得しました。コレクションを調べようとすると、エラーが発生しました (dao でコレクションをトラバースすると、データが保持されることはわかっていますが、それを超えたいと考えています)。
マネージド Bean のコードは次のとおりです。
@Transactional
private void loadAppointments() {
employees = userService.getEmployees();
}
(注:エラーが発生するのは、従業員をトラバースしようとしたときです。)
これが春のビーンコールです:
public Set<Employee> getEmployees() {
return getUserDAO().getEmployees();
}
ここにdaoコードがあります:
List<Employee> employees = getSessionFactory().getCurrentSession().createQuery(" from Employee ").list();
return new HashSet<Employee>(employees);
これは、トランザクションに関連する私の applicationContext.xml の一部です。
<!-- Enable the configuration of transactional behavior based on annotations -->
<tx:annotation-driven transaction-manager="txManager"/>
<!-- Transaction Manager is defined -->
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="SessionFactory"/>
</bean>
@Transactional アノテーションが Spring Bean で失敗した理由がわかりません。誰か説明してもらえますか?
1 人が JPATransactionManager の使用を勧めましたが、私は経験がなく、他の誰かが何か推奨事項を持っているかどうか疑問に思っていました。Spring Bean からトランザクションを制御するための最良/最も簡単な方法は何ですか? オプションを説明する記事または何かがありますか? これはかなり密度の濃いテーマのようですので、すべての助けに感謝します。
編集: com.dave.model.User com.dave.model.Client com.dave.model.Appointment com.dave.model.Employee com.dave.model.Certificate org.hibernate.dialect.MySQLDialect true