如何在Wildfly中部署时使用persistence.xml设置hibernate.hbm2ddl.auto
我需要为使用JPA的webapp生成部署模式。 服务器是Wildfly 9,Hibernate是JPA提供者。
我可以通过添加来实现这一点
到persistence.xml。
是否有另一种方法可以在Wildfly 9中为每个webapp和部署设置此属性? 我也尝试过hibernate.properties,但这没有效果。
没有开箱即用的特定于Web应用程序的部署属性。
但您可以设置您在persistence.xml中引用的特定于webapp的系统属性:
...
可以在standalone.conf
( .bat
)或standalone.conf
设置系统属性:
... ... ...
唯一的缺点是:您必须在每个环境中设置系统属性 – 没有默认值。
另一种选择是创建一个Integrator来设置设置中的值。 不幸的是,配置在开始时读入Settings对象,而Settings.setAutoCreateSchema()和其他hibernate.hbm2ddl.auto特定属性都受包保护,但您可以使用reflection设置它们:
public class AutoCreateSchemaIntegrator implements Integrator { @Override public void integrate(Configuration config, SessionFactoryImplementor factory, SessionFactoryServiceRegistry registry) { Settings settings = factory.getSettings(); try { Method setter = settings.getClass().getDeclaredMethod("setAutoCreateSchema", boolean.class); setter.setAccessible(true); setter.invoke(settings, myDeploymentSpecificProperty); } catch (ReflectiveOperationException | SecurityException e) { // handle exception } } }
您需要将该集成器的完全限定类名写入META-INF/services/org.hibernate.integrator.spi.Integrator
:
com.myproject.AutoCreateSchemaIntegrator
如果要动态确定hbm2ddl设置,这是最佳选项。
如果您使用Spring和JPA,则可以在spring config xml中定义所有持久性信息。 所以你可以包含hibernate.hbm2ddl.auto。 使用org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean作为EntityManagerFactory的示例os Spring配置文件:
org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform org.hibernate.dialect.Oracle10gDialect create false false JTA AUTO com.mycompany.myproject
对于wildfly,您可以使用带有默认值的$ {env}表达式:
- 在列上添加@Convert会使执行时间增加10倍以上
- 如何使用Hibernate Context会话创建Generic DAO类
- 支持实体 – 属性 – 值模型的Java框架
- 在hibernate / jpa最佳实践问题中将分离的或新的实体与现有实体合并
- 什么时候在hibernate中使用Lazy loading / Eager加载?
- JPA和Hibernate注释之间的关系
- 不要在web应用程序spring mvc + jpa + postgreSQL中获取所有用户对象
- 具有Hibernate 4.0和独立模式方法的MultiTenancy
- 密钥’PRIMARY’的重复条目’string1-string2′