私はNetBeansでHibernateを使用しています。私は現在のセッションを取得するためにNetBeans用のHibernateプラグインに付属のハイバネートutil
クラスを使用しています。hibernate session problem new
org.hibernate.LazyInitializationException: failed to lazily initialize a course.
私は2 DAOを使用しています:私はそれが次のエラーを与える何かをフェッチ怠惰にしようとすると、
this.session = HibernateUtil.getSessionFactory().getCurrentSession();
しかし:それは私が私の現在のセッションを取得するには、次のコードを使用しています、です。 1つは抽象DAOであり、2つ目はAbstractDAOを拡張するCoutseDAOです。
public class AbstractDAO<T> {
Session session = null;
public AbstractDAO()
{
this.session = HibernateUtil.getSessionFactory().getCurrentSession();
}
public void createObject(T object)
{
Transaction tx = null;
try
{
tx = session.beginTransaction();
session.save(object);
tx.commit();
}
catch (HibernateException e)
{
tx.rollback();
throw new DataAccessLayerException(e);
}
finally
{
}
}
public void updateObject(T object)
{
Transaction tx = null;
try
{
tx = session.beginTransaction();
session.update(object);
tx.commit();
}
catch (HibernateException e)
{
tx.rollback();
throw new DataAccessLayerException(e);
}
finally
{
}
}
public void deleteObject(T object)
{
Transaction tx = null;
try
{
tx = session.beginTransaction();
session.delete(object);
tx.commit();
}
catch (HibernateException e)
{
tx.rollback();
throw new DataAccessLayerException(e);
}
finally
{
}
}
}
第classsを次のように コードは以下の通りである
public class CourseDAO extends AbstractDAO<Course>{
public CourseDAO()
{
super();
}
public Course findByID(int cid){
Course crc = null;
Transaction tx = null;
try {
tx = session.beginTransaction();
Query q = session.createQuery("from Course as course where course.cid = "+cid+" ");
crc = (Course) q.uniqueResult();
tx.commit();
}
catch (HibernateException e)
{
e.printStackTrace();
tx.rollback();
throw new DataAccessLayerException(e);
}
finally
{
}
return crc;
}
public List<Course> findAll(){
List lst = null;
Transaction tx = null;
try {
tx = session.beginTransaction();
Query q = session.createQuery("from Course ");
lst = q.list();
tx.commit();
}
catch (HibernateException e)
{
e.printStackTrace();
tx.rollback();
throw new DataAccessLayerException(e);
}
finally
{
}
return (List<Course>)lst ;
}
}
セッションを取得する方法だけでなく、DAOをロードするために使用する完全なコードを投稿する必要があります。 – Elie
これは、Hibernateが意図した作業を行うために、DAOを誤って誤って使用しているように見えます。 'createObject(Tオブジェクト)'は、Hibernateが作業を行うべきところでクエリの長さを書いています。トランザクションの境界はDAOメソッドの境界で終わっています..すべてが完全に間違っています。 DAOのすべてのものを取り除き、Hibernateを直接使用してください。 –