在roo项目中使用javax.persistence.Table @Table注释,如何使用maven(或spring)从构建配置文件设置架构?

时间:2013-02-15 15:49:07

标签: java maven jpa spring-roo spring-profiles

与标题中的内容相似。我想让maven(或roo)管理@Table注释在构建时使用的模式。

我试过

@Table(schema = ${env.schema},name = "MYTABLE")

但得出的结论是,这不是maven的工作方式。

2 个答案:

答案 0 :(得分:4)

@Table是一个JPA注释,它与Roo(用于创建应用程序的工具)或Maven(用于编译应用程序的工具,包括依赖项的管理)无关。

如果架构在所有环境中都相同,只需使用名称(注释属性的唯一选项)

但是,可以通过Spring实现您所要求的:使模式名称参数化。

您可以在org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean中配置jpaProperties属性

例如,在Hibernate中将hibernate.default_schema设置为一个变量,其值可以由PropertyPlaceHolderConfigurer管理(在database.properties外部文件或环境属性中)

<context:property-placeholder location="classpath*:META-INF/spring/*.properties"/>
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
    <property name="persistenceUnitName" value="persistenceUnit"/>
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaProperties">
       <props>
        <prop key="hibernate.default_schema">${database.schema}</prop>
    </property>
</bean>

该值不是从构建配置文件中获取的,但我希望它对您有所帮助。我已经使用这种方法很长时间了。

答案 1 :(得分:1)

您是否可以设置另一个持久性单元并将模式从表注释中删除?我不知道roo shell会如何反应。