2013-02-07 28 views
1

我是Hibernate的新手。從Eclipse靛藍使用Hibernate 3.0。Hibernate:javax.naming.NoInitialContextException(使用Hibernate生成的DAO)

這裏討論的主題和答案沒有幫助,Hibernate: javax.naming.NoInitialContextException (Component Mapping via Annotations) 即我嘗試從會話工廠中刪除名稱,仍然出現錯誤。

我錯過了什麼嗎?有人能幫忙嗎?

誤差如下:

Feb 6, 2013 3:59:05 PM PatternsHome getSessionFactory 
SEVERE: Could not locate SessionFactory in JNDI 
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662) 
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305) 
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:342) 
at javax.naming.InitialContext.lookup(InitialContext.java:409) 
at PatternsHome.getSessionFactory(PatternsHome.java:26) 
at PatternsHome.<init>(PatternsHome.java:21) 
at OutputProcessing.saveData(OutputProcessing.java:47) 
at OutputProcessing.FPFileOutputWriter(OutputProcessing.java:110) 
at OrderPatternFileCreate.main(OrderPatternFileCreate.java:84) 
Exception in thread "main" java.lang.IllegalStateException: Could not locate SessionFactory in JNDI 
at PatternsHome.getSessionFactory(PatternsHome.java:29) 
at PatternsHome.<init>(PatternsHome.java:21) 
at OutputProcessing.saveData(OutputProcessing.java:47) 
at OutputProcessing.FPFileOutputWriter(OutputProcessing.java:110) 
at OrderPatternFileCreate.main(OrderPatternFileCreate.java:84) 

Hibernate配置文件:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.password">root</property> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost/test</property> 
    <property name="hibernate.connection.username">root</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> 
    <property name="show sql">true</property> 
    <mapping resource="hibernate_db_mapping.hbm.xml"/> 
</session-factory> 
</hibernate-configuration> 

由Hibernate生成的DAO文件和輪廓被給定爲:

public class PatternsHome { 

private static final Log log = LogFactory.getLog(PatternsHome.class); 

private final SessionFactory sessionFactory = getSessionFactory(); 

protected SessionFactory getSessionFactory() { 
    try { 
     return (SessionFactory) new InitialContext() 
       .lookup("SessionFactory"); 
    } catch (Exception e) { 
     log.error("Could not locate SessionFactory in JNDI", e); 
     throw new IllegalStateException(
       "Could not locate SessionFactory in JNDI"); 
    } 
} 
    ..... 
    } 

回答

0

I」我不能獨立完成這項工作。但是我創建HibernateUtil的泛型DAO和使用

sessionFactory = new Configuration().configure(new File("hibernate.cfg.xml")).buildSessionFactory(); 

創建SessionFactory的使用

Session session = HibernateUtil.getSessionFactory().openSession(); 
    Transaction transaction = null; 
    try{ 
     transaction = session.beginTransaction(); 
     session.save(myData); 
     transaction.commit(); 
     System.out.println("Data is Saved"); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    }finally{ 
     session.close(); 
    } 

這個工作訪問DB在我的DAO。