首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有找到hibernate.cfg.xml文件-我应该把它放到项目目录中吗?

没有找到hibernate.cfg.xml文件-我应该把它放到项目目录中吗?
EN

Stack Overflow用户
提问于 2014-10-08 19:54:35
回答 3查看 1.4K关注 0票数 1

这是我第一次使用hibernate,我已经阅读了一两篇教程,并且很快地对这个类进行了模拟,看看我是否可以从我的数据库中得到一些东西:

代码语言:javascript
复制
import java.util.Properties;

import org.eclipse.emf.teneo.PersistenceOptions;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;



public class Connector {

    public static void doStuff() {

        Properties props = new Properties();
        props.setProperty(Environment.DRIVER, "com.postgres.Driver");
        props.setProperty(Environment.USER, "postgres");
        props.setProperty(Environment.URL, "jdbc:postgres://127.0.0.1:5432/epic");
        props.setProperty(Environment.PASS, "postgres");
        props.setProperty(Environment.DIALECT, org.hibernate.dialect.ProgressDialect.class.getName());

        props.setProperty(PersistenceOptions.CASCADE_POLICY_ON_NON_CONTAINMENT,
                "REFRESH,PERSIST,MERGE");

        props.setProperty(PersistenceOptions.INHERITANCE_MAPPING, "JOINED");

        Configuration cfg = new Configuration();
        cfg.configure("hibernate.cfg.xml");// populates the data of the
                                            // configuration file

        SessionFactory factory = cfg.buildSessionFactory();
        Session session = factory.openSession();
        Transaction t = session.beginTransaction();

        Query query = session.createQuery("select * from otar");
        java.util.List list = query.list();
        System.out.println(list);
        t.commit();
        session.close();
    }

    public static void main(String[] args) {
        doStuff();
    }

}

编译器说我缺少hibernate.cfg.xml文件,我读过它需要在我的项目的src目录中,我也读到它不是为我生成的,但是我也读到了相反的东西,它是为我生成的。我对这个文件的理解是,表列mapping...it可能有一个更复杂和更有用的用途,但我只是刚刚开始使用它,所以我知道,以下是我的问题:

  1. 它是为我生成的,还是我需要创建的?
  2. 可以创造吗?就像这是很好的练习吗?
  3. 我亲手做它有什么好处。
  4. 有关于如何创建一个的说明吗?

编辑我忘记提到,这是一个插件项目,我正在使用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-08 20:34:28

Hibernate配置文件(hibernate.cfg.xml)和Hibernate映射文件(*.hbm)有区别。如果您听说过生成的代码,它涉及最后的代码,但是第一个应该包括那些映射文件。有两三种不同的发展方法。首先创建具有映射和生成数据库模式的Java类,其次创建数据库模式和生成Java类(逆向工程),第三是创建已有模式的类和映射。无论使用哪种方法,都由您自己决定,但是如果hibernate.cfg.xml不是由IDE创建的,则应该手动创建它。像Spring这样的一些框架可以为Hibernate提供自己的配置,从而完全忽略了hibernate.cfg.xml。创建hibernate.cfg.xml文件没有什么神奇之处。你可以从

代码语言:javascript
复制
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

  <session-factory>
  <!-- here you can place properties and mapping -->

  </session-factory>

</hibernate-configuration>

而且你是对的,它应该在你的项目的src文件夹中。在运行时,它应该是生成.class文件的地方,即在类路径上。

票数 1
EN

Stack Overflow用户

发布于 2014-10-08 20:15:50

hibernate.cfg.xml应该在类路径中。请将其添加到类路径或类文件夹中。

票数 0
EN

Stack Overflow用户

发布于 2014-10-09 00:07:25

或者你可以使用注解和Spring,所以你赢了

例子:

代码语言:javascript
复制
@Autowired
@Bean(name = "sessionFactory")
public SessionFactory getSessionFactory(DataSource dataSource) {

    LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(
            dataSource);

    sessionBuilder.addAnnotatedClasses(Pojo1.class);
    sessionBuilder.addAnnotatedClasses(Pojo2.class);

    sessionBuilder.addProperties(getHibernateProperties());
    return sessionBuilder.buildSessionFactory();
}

private Properties getHibernateProperties() {
    Properties properties = new Properties();
    properties.put("hibernate.show_sql", "true");
    properties.put("hibernate.dialect",
            "org.hibernate.dialect.PostgreSQLDialect");
    return properties;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26265295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档