休眠:javax.naming.NoInitialContextException(通过注解的组件映射) [英] Hibernate: javax.naming.NoInitialContextException (Component Mapping via Annotations)
问题描述
谁能告诉我为什么会出现以下错误?
Could someone tell me why am I getting the following error?
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 表,但我收到了这个错误.
I am getting the desired result and getting the person table populated with the data but I am getting this error.
这是我正在使用的代码:Person.java
Here is the code for I am using: 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;
}
}
Address.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>
Client.java
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();
}
}
有人能帮我理解为什么我会收到这个错误吗?
Could someone help me understand why am I getting that error?
谢谢.
推荐答案
我猜是因为你在
中指定了 name
属性,因此 Hibernate 尝试将 SessionFactory
绑定到该名称下的 JNDI,但 JNDI 在您的环境中不可用.因此,删除 name
属性.
I guess it's caused by the fact that you specified name
attribute in <session-factory>
, therefore Hibernate tries to bind SessionFactory
to JNDI under that name, but JNDI is not available in your environment. So, remove name
attribute.
这篇关于休眠:javax.naming.NoInitialContextException(通过注解的组件映射)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!