有的时候是用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 实现动态替换表名(分表)的方法 ...通过使用 Hibernate 拦截器,我们可以轻松地实现动态替换表名,而无需修改已有的代码。这种方法简单、安全、可维护,非常适合大型项目中的数据库操作。
这里可能需要用到第三方的分库分表中间件,如MyCat或ShardingSphere,它们提供了丰富的API和配置方式来支持动态路由。 在Spring Boot中注册拦截器,我们需要在配置类中使用`@EnableAspectJAutoProxy`开启AOP代理,...
6. **事务管理(Transaction Management)**:JPA提供了事务控制机制,可以在应用程序中控制数据修改的原子性、一致性、隔离性和持久性。 7. **关系映射(Relationship Mapping)**:JPA支持一对一、一对多、多对一...
2. **持久化上下文(Persistence Context)**:这是JPA管理实体对象的环境,它可以跟踪实体的状态(新建、已修改、未改变或已删除),并负责与数据库的交互。 3. ** EntityManager**:它是JPA的主要接口,提供了对...
JPA代码生成器 1.生成domain dao ,service, mvc文件 ...4.运行方法:JDBCCodeGenerator ,修改public static void main(String[] args) 中的String tableName 的值,就可以根据表名生成对应的JAVA文件
- **实体管理器**:`EntityManager`是JPA的核心接口,负责实体的创建、修改、删除等操作。同时,它也提供了事务控制功能。 - **事务控制**:JPA支持本地事务和分布式事务,可以通过编程式或声明式的方式控制事务的...
- **事务(Transaction)**: JPA支持事务处理,允许在一组操作中进行回滚或提交更改。 **2. JPA元数据** - **实体注解(Annotations)**: 如`@Entity`, `@Table`, `@Id`, `@GeneratedValue`等,用来定义实体类、...
然而,需要注意的是,`ddl-auto=update`在生产环境中可能存在风险,因为它可能会意外删除或修改现有的数据。因此,在生产环境中,通常建议使用`validate`或`none`模式,并通过数据库迁移工具来管理数据库变更。
POWERDESIGNER 生成 Oracle 表名带有引号的问题可以通过修改表名或取消大小写敏感性来解决。 POWERDESIGNER 是一款功能强大的数据建模工具,可以帮助用户设计、生成和管理数据库结构。了解 POWERDESIGNER 和 Oracle...
- 通过使用JPA的注解,如`@Entity`(表示这是一个实体类)、`@Table`(指定数据库表名)、`@Id`(标识主键)、`@GeneratedValue`(主键生成策略)等,可以对JavaBean进行更精细的配置。 5. **使用生成的JavaBean**...
通过使用批注,开发人员可以在不修改源代码结构的前提下,定义实体类的映射规则,从而使代码更加简洁、易读。此外,批注还支持按异常配置的原则,即大部分场景下采用默认配置,仅在必要时通过批注显式配置特定行为,...
如果未指定表名,默认情况下,JPA 将使用类名作为表名。 #### 三、表映射 (@Table) `@Table` 注解用于进一步定制实体类所映射的数据库表的结构。它可以用来指定表名、目录、模式以及唯一约束等。 ##### 3.1 表名 ...
在每个实体类中,我们将使用`@Entity`注解标识这是一个JPA实体,并使用`@Table`注解指定对应的数据库表名。对于多对多关系,我们需要在双方实体类中分别添加一个`@ManyToMany`注解的集合属性,表示另一方实体的集合...
`@Audited` 是 Spring Data JPA 的审计注解,配合 AuditAware 接口,可以追踪实体的修改历史。 ### 10. `@PrePersist`, `@PostPersist`, `@PreUpdate`, `@PostUpdate`, `@PreRemove`, `@PostRemove` 这些是 JPA 的...
还需要使用`@JoinTable`注解来指定中间表(用于存储两个实体的连接信息),包括表名、连接字段等。 2. **关联的维护**:在双向关联中,有主侧和次侧之分。主侧实体负责维护关联,即添加或删除关联时,只操作主侧...
4. **注解细节**:`@JoinColumn`用于单向一对一或一对多关系,而在多对多关系中,通常使用`@JoinTable`来指定中间表的信息,包括表名、连接列等。 5. **操作关联**:在JPA中,可以通过添加或移除对象到集合属性来...
- **事务性持久化上下文**:与当前事务绑定,当事务结束时,持久化上下文中的更改会同步到数据库。 - **扩展性持久化上下文**:在事务之外使用,适用于跨事务的场景。 - **属性信息检索**:EntityManagerFactory...
`nullable`指明是否允许为空,`insertable`和`updatable`分别控制是否允许在插入和更新操作中修改该列,`columnDefinition`可以指定创建列时的DDL语句,而`secondaryTable`用于指定从表名。 示例: ```java ...