开发者

Hibernate: javax.naming.NoInitialContextException (Component Mapping via Annotations)

开发者 https://www.devze.com 2023-03-11 22:05 出处:网络
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 a

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:8开发者_JAVA百科67)
    at com.transbinary.main.Client.main(Client.java:13)

I am getting the desired result and getting the person table populated with the data but I am getting this error.

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?

Thanks.


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.


Just remove the name attribute even if its empty from your session-factory mapping [hibernate.cfc.xml]


To fix your error, you must delete the name attribute in the SessionFactory node.

Hibernate: javax.naming.NoInitialContextException (Component Mapping via Annotations)

0

精彩评论

暂无评论...
验证码 换一张
取 消