找不到hibernate.cfg.xml文件 - 我应该将它放在项目目录中吗?

时间:2014-10-08 19:54:36

标签: java hibernate hibernate-mapping nhibernate-configuration hibernate-postgresql

这是我第一次使用hibernate,我已经完成了一两个教程,我很快就嘲笑了这个类,看看我是否可以从我的数据库中获取一些东西:

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目录中,我还读到它没有得到为我生成,但我也读到相反它确实为我生成了...我对这个文件的理解是它需要表列映射...它可能有一个更复杂和有用的用途但我我刚刚开始这么做,这就是我所知道的,这是我的问题:

  1. 它是为我生成还是我需要创建它?
  2. 创建好吗?喜欢这是好习惯吗?
  3. 我手工制作的好处是什么。
  4. 是否有关于如何创建一个的说明?
  5. EDIT 我忘了提到这是我正在使用的插件项目。

3 个答案:

答案 0 :(得分:1)

Hibernate配置文件(hibernate.cfg.xml)和Hibernate映射文件(* .hbm)之间存在差异。如果您已经听说过生成的代码,它会涉及到最后的代码,但首先应该包含那些映射文件。有两种或三种不同的开发方法。首先使用映射创建Java类并生成数据库模式,第二个创建数据库模式并生成Java类(逆向工程),第三个是为现有模式创建类和映射。无论您使用哪种方法取决于您,但hibernate.cfg.xml如果不是由IDE创建的话,您应该手动创建。像Spring这样的一些框架可以为Hibernate提供自己的配置,因此完全忽略了hibernate.cfg.xml。创建hibernate.cfg.xml文件并不神奇。你可以从

开始
<?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 :(得分:0)

hibernate.cfg.xml应该在classpath中。请将它添加到classpath或classes文件夹中。

答案 2 :(得分:0)

或者您可以使用注释和Spring,这样您就赢了

示例:

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