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