`
a14400610
  • 浏览: 6361 次
社区版块
存档分类
最新评论

JPA动态修改表名

 
阅读更多

有的时候是用JPA的注解进行实体类与数据库表的映射,但是往往有些客户对于表的名称要求加特定的前缀,就需要自定义命名策略。如下配置:

	<!-- 持久化管理 -->
	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  		<property name="dataSource" ref="dataSource"/>
  		<property name="packagesToScan" value="com.sunyard"></property>
  		<property name="jpaVendorAdapter">
    		<bean  
                class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">  
                <property name="showSql" value="true" />  
                <property name="database" value="MYSQL" />
                <property name="generateDdl" value="true"></property>
            </bean>
  		</property>
  		<property name="jpaProperties">
  		<!-- 使用自定义的类改写@table中定义的name值,而且改变映射的表名 -->
			<props>
				<prop key="hibernate.ejb.naming_strategy">com.sunyard.frameworkset.whj.MyDefaultComponentSafeNamingStrategy</prop>
			</props>
		</property>
 	</bean>

 

public class MyDefaultComponentSafeNamingStrategy extends DefaultComponentSafeNamingStrategy{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public String classToTableName(String className) {
		String name= super.classToTableName(className);
		System.out.println("***************************whj"+name);
		return "whj_"+name;
	}
	
	@Override
	public String tableName(String tableName) {
		if(tableName.startsWith("sunyard")){
			return "szx_"+super.tableName(tableName);
		}
		return super.tableName(tableName);
	}
	
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics