使用hibernate的Java

使用hibernate的Java,java,eclipse,hibernate,Java,Eclipse,Hibernate,我试着用hibernate用java编写一个基本程序。。。但是我得到了下面的错误描述 WARN: HHH000277: Could not bind factory to JNDI org.hibernate.service.jndi.JndiException: Error parsing JNDI name [hiber] at org.hibernate.service.jndi.internal.JndiServiceImpl.parseName(JndiServiceImpl.

我试着用hibernate用java编写一个基本程序。。。但是我得到了下面的错误描述

WARN: HHH000277: Could not bind factory to JNDI
org.hibernate.service.jndi.JndiException: Error parsing JNDI name [hiber]
    at org.hibernate.service.jndi.internal.JndiServiceImpl.parseName(JndiServiceImpl.java:92)
    at org.hibernate.service.jndi.internal.JndiServiceImpl.bind(JndiServiceImpl.java:108)
    at org.hibernate.internal.SessionFactoryRegistry.addSessionFactory(SessionFactoryRegistry.java:89)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:480)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1769)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1840)
    at manageEmployee.main(manageEmployee.java:26)
Caused by: 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(Unknown Source)
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.getNameParser(Unknown Source)
    at org.hibernate.service.jndi.internal.JndiServiceImpl.parseName(JndiServiceImpl.java:86)
    ... 6 more

Exception in thread "main" java.lang.ClassCastException: org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction cannot be cast to javax.transaction.Transaction
    at manageEmployee.addEmployee(manageEmployee.java:44)
    at manageEmployee.main(manageEmployee.java:34)
警告:hh000277:无法将工厂绑定到JNDI
org.hibernate.service.jndi.JndiException:解析jndi名称[hiber]时出错
位于org.hibernate.service.jndi.internal.JndiServiceImpl.parseName(JndiServiceImpl.java:92)
位于org.hibernate.service.jndi.internal.JndiServiceImpl.bind(JndiServiceImpl.java:108)
位于org.hibernate.internal.SessionFactoryRegistry.addSessionFactory(SessionFactoryRegistry.java:89)
位于org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:480)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1769)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1840)
位于manageEmployee.main(manageEmployee.java:26)
原因:javax.naming.NoInitialContextException:需要在环境或系统属性中指定类名,或作为小程序参数,或在应用程序资源文件中指定类名:java.naming.factory.initial
位于javax.naming.spi.NamingManager.getInitialContext(未知源)
位于javax.naming.InitialContext.getDefaultInitCtx(未知源)
位于javax.naming.InitialContext.getURLOrDefaultInitCtx(未知源)
位于javax.naming.InitialContext.getNameParser(未知源)
位于org.hibernate.service.jndi.internal.JndiServiceImpl.parseName(JndiServiceImpl.java:86)
... 还有6个
线程“main”java.lang.ClassCastException中的异常:org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction无法转换为javax.transaction.transaction
在manageEmployee.addEmployee(manageEmployee.java:44)
位于manageEmployee.main(manageEmployee.java:34)

我通过删除hibernate配置文件中打开会话工厂标记的name属性来修复此问题,使其如下所示:

<session-factory>

而不是

<session-factory name="">


这可能是由于缺少hibernate的一些依赖库或您导入了一些同名的假库引起的。

如果发现以下情况,请检查您的导入语句:

import javax.transaction.Transaction;
然后将其替换为:

import org.hibernate.Transaction;
并从所有位置移除铸件,找到您正在铸造的位置,如下所示:

 tx = (Transaction) session.beginTransaction();
除去

(交易)

从所有地方移除铸件