gpt4 book ai didi

Hibernate:javax.naming.NoInitialContextException(通过注释进行组件映射)

转载 作者:行者123 更新时间:2023-12-02 22:03:36 26 4
gpt4 key购买 nike

有人可以告诉我为什么会出现以下错误吗?

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;
}
}

地址.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();
}
}

有人可以帮助我理解为什么会出现该错误吗?

谢谢。

最佳答案

我猜这是由于您指定了 name 造成的<session-factory> 中的属性,因此 Hibernate 尝试绑定(bind) SessionFactory到该名称下的 JNDI,但 JNDI 在您的环境中不可用。因此,删除 name属性。

关于Hibernate:javax.naming.NoInitialContextException(通过注释进行组件映射),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6293052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com