一尘不染

如何在JPA persistence.xml中使用Hibernate SchemaUpdate类?

hibernate

我有一个使用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

有人做过吗?谢谢。


阅读 331

收藏
2020-06-20

共1个答案

一尘不染

卡里姆(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类型的配置中,仅此而已。

2020-06-20