我真的快疯了。我有这样的代码:
private SessionFactory getSessionFactory() {
Configuration conf = new Configuration();
System.out.println("before");
conf.configure("hibernate.cfg.xml");
System.out.println("after");
StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder().applySettings(conf.getProperties());
SessionFactory sessionFactory = conf.buildSessionFactory(ssrb.build());
return sessionFactory;
}
我已经在Eclipse中使用src文件夹设置了该项目,该文件夹包含包和hibernate.cfg.xml文件。当我使用Eclipse运行项目时,客户端会得到良好的会话(打印<之前>和<之后>)。
现在:我还有一个Ant目标来运行我的项目,我确信hibernate.cfg.xml在类路径中,但当我运行程序时,应用程序不会在<之后打印>;。也不例外,但最终我得到了Caused by: java.lang.IllegalStateException: Could not locate SessionFactory in JNDI
。
有人吗?谢谢
问题是文件不在正确的位置。我增强了Ant脚本,使用以下目标将资源复制到类路径的根目录中。
<target name="copy-resources">
<copy todir="${targetdir}">
<fileset dir="${sourcedir}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
Configuration cf = new Configuration();
// cf.setNamingStrategy(ImprovedNamingStrategy.INSTANCE);
cf.setProperty("hibernate.connection.datasource", datasourceJNDIName);
cf.configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(cf.getProperties()).build();
SessionFactory sessionFactory = cf.buildSessionFactory(serviceRegistry);