有人可以告诉我为什么出现以下错误吗?
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.util.NamingHelper.bind(NamingHelper.java:75) at org.hibernate.impl.SessionFactoryObjectFactory.addInstance(SessionFactoryObjectFactory.java:113) at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:348) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at com.transbinary.main.Client.main(Client.java:13)
我得到期望的结果,并用数据填充 人员 表,但出现此错误。
这是我正在使用的代码: Person.java
@Entity public class Person implements Serializable { private Integer id; private Address homeAddress; @Id @GeneratedValue public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Address getHomeAddress() { return homeAddress; } public void setHomeAddress(Address homeAddress) { this.homeAddress = homeAddress; } }
地址.java
@Embeddable public class Address implements Serializable { private String city; private String Country; public Address() {} public Address(String city, String country) { super(); this.city = city; Country = country; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getCountry() { return Country; } public void setCountry(String country) { Country = country; } }
hibernate.cfg.xml
<hibernate-configuration> <session-factory name=""> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">password</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydb</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.hbm2ddl.auto">create</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <mapping class="com.transbinary.domain.Person"/> </session-factory> </hibernate-configuration>
客户端程序
public class Client { public static void main(String[] args) { SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction txn = session.beginTransaction(); Person person = new Person(); Address homeAddress = new Address("Mumbai", "India"); person.setHomeAddress(homeAddress); session.save(person); txn.commit(); session.close(); } }
有人可以帮助我了解我为什么会收到该错误吗?
谢谢。
我猜这是由于您在中指定了name属性造成的<session- factory>,因此Hibernate尝试以SessionFactory该名称绑定到JNDI,但是JNDI在您的环境中不可用。因此,删除name属性。
name
<session- factory>
SessionFactory