Hibernate 模式生成考虑来自其他 Maven 模块的实体

问题描述

我正在使用 javax 的 Persitence 类从我们的实体生成 sql 脚本。对于我目前所在的项目,它工作得很好。这是代码

final Map<Object,Object> properties = new HashMap<>(dialect.getDefaultProperties());
properties.put(AvailableSettings.DIALECT,dialect.getClass().getName());
properties.put(AvailableSettings.CONNECTION_PROVIDER,DriverManagerConnectionProviderImpl.class.getName());
properties.put(AvailableSettings.DEFAULT_SCHEMA,schemaName);
properties.put(AvailableSettings.HBM2DDL_SCRIPTS_ACTION,"create");
properties.put(AvailableSettings.HBM2DDL_CREATE_SOURCE,"Metadata");
properties.put(AvailableSettings.HBM2DDL_SCRIPTS_CREATE_TARGET,target.toURI().toURL().toString());
properties.put(AvailableSettings.USE_QUERY_CACHE,"false");
properties.put(AvailableSettings.USE_SECOND_LEVEL_CACHE,"false");
properties.put(AvailableSettings.IMPLICIT_NAMING_STRATEGY,"org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl");
properties.put(AvailableSettings.PHYSICAL_NAMING_STRATEGY,SpringPhysicalNamingStrategy.class.getName());

properties.put(AvailableSettings.JPA_VALIDATION_MODE,"ddl,callback");
properties.put(AvailableSettings.HBM2DDL_DATABASE_ACTION,"none");
properties.put(AvailableSettings.DRIVER,"org.h2.Driver");
properties.put(AvailableSettings.URL,"jdbc:h2:mem:export");
properties.put(AvailableSettings.HBM2DDL_DELIMITER,";");

System.setProperty("line.separator",";\n");

Persistence.generateSchema(schemaName,properties);

通常它对当前项目中的实体工作正常,但不适用于外部实体。我有一个外部 maven 模块,其中包含一些实体,我们的 sql 脚本也需要考虑这些实体。有没有办法在属性中定义外部模块,所以也会考虑?

解决方法

  1. 为您的实体创建一个 Maven 模块
  2. 在这个模块中执行mvn clean install
  3. 将此模块添加到要使用此模块实体的项目的 dependencies 中。

这就是你所要做的,我也在许多项目中应用了它。 由于您没有提供您以这种方式所做的事情,因此无法提供更多帮助。

因此,请尝试这些步骤,如果出现问题,请更新您的问题,说明如何执行这些步骤。

P.S:另外,如果这是第一次创建多模块项目,请谷歌关于 multi-module maven 项目。那里有很多有用的帖子。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...