gpt4 book ai didi

java - ...hbm.xml 文件在哪里?

转载 作者:搜寻专家 更新时间:2023-11-01 03:08:26 25 4
gpt4 key购买 nike

我是一个 Hibernate 新手,正在尝试一个带有嵌入式 Derby 数据库的小型 Hibernate 示例。我在 eclipse 中发展。我没有使用 Spring 或 Maven,我没有设置 Web 应用程序,我没有应用程序服务器。如果项目变大,我无疑会使用其中的一些,但现在我只是想让这个示例起作用。

我得到的错误是:

Exception in thread "main" org.hibernate.MappingNotFoundException: resource: javabeat/net/hibernate/EmployeeInfo.hbm.xml not found

有时只是:

Exception in thread "main" org.hibernate.MappingNotFoundException: resource: EmployeeInfo.hbm.xml not found

这是我的代码;我已经标记了错误似乎来自哪里 - eclipse 控制台在那里显示异常并停止运行,这是合乎逻辑的地方:

package javabeat.net.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class JavaBeatHibernateExample
{
public static void main(String args[]) throws Exception
{

configureDerbyEmbedded();

Configuration cfg = new Configuration();
cfg.addClass(javabeat.net.hibernate.EmployeeInfo.class);

cfg.setProperty("hibernate.connection.driver_class", "org.apache.derby.jdbc.EmbeddedDriver");
cfg.setProperty("hibernate.connection.password", "password");
cfg.setProperty("hibernate.connection.url", "jdbc:derby:myEmbeddedDB;create=true");
cfg.setProperty("hibernate.connection.username", "admin");
cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.DerbyDialect");
cfg.setProperty("cache.provider_class", "org.hibernate.cache.NoCacheProvider");

// Exception almost certainly generated here.
cfg.addResource("EmployeeInfo.hbm.xml");

cfg.setProperty("hibernate.current_session_context_class", "thread");
cfg.setProperty("hibernate.show_sql", "true");
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
transaction.begin();
EmployeeInfo employeeInfo = new EmployeeInfo();
employeeInfo.setSno(1);
employeeInfo.setName("KamalHasan");
session.save(employeeInfo);
transaction.commit();
session.close();
}

private static void configureDerbyEmbedded()
throws ClassNotFoundException, IllegalAccessException, InstantiationException
{
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
}
}

我在eclipse中设置的文件夹如下

CarRepair
--src
----javabeat
------net
--------hibernate
----main
------resources
--------javabeat
----------net
------------hibernate

我有一个 EmployeeInfo.hbm.xml,我把它放在以下地方: 源代码/javabeat/net/hibernate 主要/资源/javabeat/net/hibernate 主要/资源

而且我总是遇到上述异常。首先,它只是说找不到 XML 文件;在后两者中,它在错误消息中的 XML 文件名前面添加了 javabeat/net/hibernate。

该文件应该在其他地方,还是我应该做其他事情?

编辑:它可能是 xml 文件本身中的某些内容,带有误导性的错误消息吗?

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="javabeat.net.hibernate.EmployeeInfo" table="Employee_Info">
<id name="sno" column="sno" type="java.lang.Integer">
</id>
<property name="name" column="name" type="java.lang.String"/>
</class>
</hibernate-mapping>

最佳答案

您的目录布局很特别。假设 src 是 Eclipse 中的源文件夹,它会将所有非 Java 文件复制到类或 bin 目录(或您为编译类选择的任何目录名称),并且 EmployeeInfo .hbm.xml 应该直接在 src 下,因为您要告诉 Hibernate 从类路径的根加载它:

cfg.addResource("EmployeeInfo.hbm.xml");

如果你把它放在main/resources中,加载它的代码应该是

cfg.addResource("main/resources/EmployeeInfo.hbm.xml");

为什么不使用自己的包层次结构,从而使用以下目录树:

src
com
rcook
myapp

关于java - ...hbm.xml 文件在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14673930/

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