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

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);
	}
	
}

 

分享到:
评论

相关推荐

    spring hibernate实现动态替换表名(分表)的方法

    Spring Hibernate 实现动态替换表名(分表)的方法 ...通过使用 Hibernate 拦截器,我们可以轻松地实现动态替换表名,而无需修改已有的代码。这种方法简单、安全、可维护,非常适合大型项目中的数据库操作。

    java + spring boot +jpa 拦截器分库分表demo

    这里可能需要用到第三方的分库分表中间件,如MyCat或ShardingSphere,它们提供了丰富的API和配置方式来支持动态路由。 在Spring Boot中注册拦截器,我们需要在配置类中使用`@EnableAspectJAutoProxy`开启AOP代理,...

    JPA讲解视频

    6. **事务管理(Transaction Management)**:JPA提供了事务控制机制,可以在应用程序中控制数据修改的原子性、一致性、隔离性和持久性。 7. **关系映射(Relationship Mapping)**:JPA支持一对一、一对多、多对一...

    jpa开发实例和文档

    2. **持久化上下文(Persistence Context)**:这是JPA管理实体对象的环境,它可以跟踪实体的状态(新建、已修改、未改变或已删除),并负责与数据库的交互。 3. ** EntityManager**:它是JPA的主要接口,提供了对...

    JPA代码生成器

    JPA代码生成器 1.生成domain dao ,service, mvc文件 ...4.运行方法:JDBCCodeGenerator ,修改public static void main(String[] args) 中的String tableName 的值,就可以根据表名生成对应的JAVA文件

    JPA Specification

    - **实体管理器**:`EntityManager`是JPA的核心接口,负责实体的创建、修改、删除等操作。同时,它也提供了事务控制功能。 - **事务控制**:JPA支持本地事务和分布式事务,可以通过编程式或声明式的方式控制事务的...

    开发jpa的包

    - **事务(Transaction)**: JPA支持事务处理,允许在一组操作中进行回滚或提交更改。 **2. JPA元数据** - **实体注解(Annotations)**: 如`@Entity`, `@Table`, `@Id`, `@GeneratedValue`等,用来定义实体类、...

    springboot集成jpa代码,自动生成表

    然而,需要注意的是,`ddl-auto=update`在生产环境中可能存在风险,因为它可能会意外删除或修改现有的数据。因此,在生产环境中,通常建议使用`validate`或`none`模式,并通过数据库迁移工具来管理数据库变更。

    POWERDESIGNER生成oracle表名带有引号

    POWERDESIGNER 生成 Oracle 表名带有引号的问题可以通过修改表名或取消大小写敏感性来解决。 POWERDESIGNER 是一款功能强大的数据建模工具,可以帮助用户设计、生成和管理数据库结构。了解 POWERDESIGNER 和 Oracle...

    JPA_由数据库生成JavaBean

    - 通过使用JPA的注解,如`@Entity`(表示这是一个实体类)、`@Table`(指定数据库表名)、`@Id`(标识主键)、`@GeneratedValue`(主键生成策略)等,可以对JavaBean进行更精细的配置。 5. **使用生成的JavaBean**...

    JPA_批注参考

    通过使用批注,开发人员可以在不修改源代码结构的前提下,定义实体类的映射规则,从而使代码更加简洁、易读。此外,批注还支持按异常配置的原则,即大部分场景下采用默认配置,仅在必要时通过批注显式配置特定行为,...

    JPA标注推荐圈子: Database圈子

    如果未指定表名,默认情况下,JPA 将使用类名作为表名。 #### 三、表映射 (@Table) `@Table` 注解用于进一步定制实体类所映射的数据库表的结构。它可以用来指定表名、目录、模式以及唯一约束等。 ##### 3.1 表名 ...

    JPA多对多Demo

    在每个实体类中,我们将使用`@Entity`注解标识这是一个JPA实体,并使用`@Table`注解指定对应的数据库表名。对于多对多关系,我们需要在双方实体类中分别添加一个`@ManyToMany`注解的集合属性,表示另一方实体的集合...

    spring data jpa

    `@Audited` 是 Spring Data JPA 的审计注解,配合 AuditAware 接口,可以追踪实体的修改历史。 ### 10. `@PrePersist`, `@PostPersist`, `@PreUpdate`, `@PostUpdate`, `@PreRemove`, `@PostRemove` 这些是 JPA 的...

    14_传智播客JPA详解_JPA中的多对多双向关联的各项关系操作

    还需要使用`@JoinTable`注解来指定中间表(用于存储两个实体的连接信息),包括表名、连接字段等。 2. **关联的维护**:在双向关联中,有主侧和次侧之分。主侧实体负责维护关联,即添加或删除关联时,只操作主侧...

    13_jpa多对多双向关联实体定义与注解

    4. **注解细节**:`@JoinColumn`用于单向一对一或一对多关系,而在多对多关系中,通常使用`@JoinTable`来指定中间表的信息,包括表名、连接列等。 5. **操作关联**:在JPA中,可以通过添加或移除对象到集合属性来...

    Openjpa手册

    - **事务性持久化上下文**:与当前事务绑定,当事务结束时,持久化上下文中的更改会同步到数据库。 - **扩展性持久化上下文**:在事务之外使用,适用于跨事务的场景。 - **属性信息检索**:EntityManagerFactory...

    jpa常用标注

    `nullable`指明是否允许为空,`insertable`和`updatable`分别控制是否允许在插入和更新操作中修改该列,`columnDefinition`可以指定创建列时的DDL语句,而`secondaryTable`用于指定从表名。 示例: ```java ...

Global site tag (gtag.js) - Google Analytics