我有一个使用SchemaUpdate的主要方法,可以在控制台上显示要更改/创建的表,并且在我的Hibernate项目中可以正常工作:
public static void main(String[] args) throws IOException { //first we prepare the configuration Properties hibProps = new Properties(); hibProps.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("jbbconfigs.properties")); Configuration cfg = new AnnotationConfiguration(); cfg.configure("/hibernate.cfg.xml").addProperties(hibProps); //We create the SchemaUpdate thanks to the configs SchemaUpdate schemaUpdate = new SchemaUpdate(cfg); //The update is executed in script mode only schemaUpdate.execute(true, false); ...
我想在JPA项目中重用此代码,它没有hibernate.cfg.xml文件(也没有.properties文件),但是有一个persistence.xml文件(如JPA规范指定的在META- INF目录中自动检测到) 。
我尝试了这种过于简单的调整,
Configuration cfg = new AnnotationConfiguration(); cfg.configure();
但由于该异常而失败。
Exception in thread "main" org.hibernate.HibernateException: /hibernate.cfg.xml not found
有人做过吗?谢谢。
卡里姆(Kariem)走在正确的道路上,但让我尝试澄清一下。
假设您具有普通的JPA标准配置,除了classpath上的Hibernate jars外,没有任何Hibernate特定的配置。如果您以J2SE引导模式运行,那么您已经有一些类似于Java或Spring配置等的代码:
Map<String, Object> props = getJPAProperties(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence-unit-name", props);
要运行SchemaUpdate,只需使用以下代码即可:
Map<String, Object> props = getJPAProperties(); Ejb3Configuration conf = new Ejb3Configuration().configure("persistence-unit-name", props); new SchemaUpdate(conf.getHibernateConfiguration()).execute(true, false);
我不确定这在容器环境中如何运行,但是在简单的J2SE或Spring类型的配置中,仅此而已。