誰かが私に次のエラーが発生する理由を教えてもらえますか?
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テーブルにデータが入力されていますが、このエラーが発生しています。
これが私が使用しているコードです: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();
}
}
誰かが私にそのエラーが発生する理由を理解するのを手伝ってもらえますか?
ありがとう。
<session-factory>
でname
属性を指定したことが原因だと思います。したがって、HibernateはSessionFactory
をその名前でJNDIにバインドしようとしますが、JNDIはご使用の環境では使用できません。したがって、name
属性を削除します。
セッションファクトリマッピング[hibernate.cfc.xml]から名前属性が空であっても、削除するだけです。