`
m635674608
  • 浏览: 4932397 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

hibernate动态表名映射

 
阅读更多

方法一

        

ibernate怎么实现一个类对象map多个表名
1) 映射文件

在一个映射文件中定义class和table的对应关系,用entity-name来区分不同的映射:

<class=”MyClass” entity-name=”testA” table=”mytable_A”>

<property name=”name” column=”st_name”/>

……

</class>

 

<class=”MyClass” entity-name=”testB” table=”mytable_B”>

<property name=”name” column=”st_name”/>

……

</class>

 

(2)在API调用、HQL语句中使用entity-name,而不是class名称。

get(“testA”, id)

delete(“testA”, object)

save(“testA”, object)

saveOrUpdate(“testA”, object)

 

from testA t where t.name = ‘hello’

 方法二

  

近用Hibernate做一个项目的时候遇到这么一个问题: 
用一个配置文件,一个类去映射多个表,(每个表的结构相同)。按照平时的做法,有多少个表就要 
写多少个配置文件,岂不是很麻烦。怎样才能只写一个配置文件就能达到上述目的呢? 

经过研究,发现Hibernate中的NamingStrategy可以达到这个目的。它是用来定义表名和列名映射规 
则的一个接口。我们要通过实现这个接口来实现自己的命名策略。这个接口中包含的十个方法,其中的 
public String classToTableName(String className)是通过类名来映射表名的。实现我们的想法就要用 
到这个方法。好了,下面来看怎么做: 

1、自定义一个类MyNamingStrategy来实现NamingStrategy。(这样你要实现10个方法,如果其他方法 
不需要,我们可以通过继承它的一个适配器类DefaultNamingStrategy来只实现我们需要的方法)好了,我 
们就继承DefaultNamingStrategy 吧。 
2、实现public String classToTableName(String className)方法来实现自己命名策略。 
我这的业务需要是每隔一个月就要换一个表。比如1月用biz_1,那么2月就用biz_2....但是这些表的结构是相同的。我们要做的就是通过获得月份来动态的选择表。我们从这个方法中这样写: 
public class MyNamingStrategy extends DefaultNamingStrategy { 
public static final MyNamingStrategy INSTANCE = new MyNamingStrategy(); 
public String classToTableName(String className) { 
return "biz_" + Calendar.getInstance().get(Calendar.DAY_OF_MONTH); 
} 
} 

好了,这样就可以根据月份来动态的选择表名了。 
3、使用命名策略。 
要使用这个命名策略可以这样: 
Configuration cfg = new Configuration() 
.setNamingStrategy(MyNamingStrategy.INSTANCE) 
.configure("hibernate.cfg.xml") 
.addFile("biz.hbm.xml"); 
ok,这样就可以实现我们的动态表名映射啦! 

 

分享到:
评论

相关推荐

    Hibernate_Annotation关联映射

    和其它许多批注一样,在多对多关联中很多值是自动生成,党双向多对多关联中没有定义任何物理映射时,Hibernate根据以下规则生成相应的值,关联表名:主表表名+下划线+从表表名,关联到主表的外键名:主表名+下划线+...

    Hibernate笔记 马士兵

    第9课 Hibernate的重点学习:Hibernate的对象关系映射 12 一、对象---关系映射模式 12 二、常用的O/R映射框架: 13 第10课 模拟Hibernate原理(OR模拟) 13 一、 项目名称 13 二、 原代码 13 第11课 Hibernate基础配置...

    15hibernate_day04_pm_v1.zip_K.

    如何使用Myeclipse生成映射文件和实体类? 映射文件和实体类《=========》DB 1)如何根据DB生成实体类和映射文件 ...选择映射类型,一般选择Hibernate Types k.点表名可以设置实体类名和主键生成方法 l.完成

    Hibernate使用中防止SQL注入的几种方案

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。  在获取便利操作的同时,SQL的注入问题也值得我们的密切注意,...

    Hibernate注释大全收藏

    Hibernate注释大全收藏 声明实体Bean @Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } } @Entity ...

    Hibernate框架介绍以及入门 【二】Hibernate的常见配置

    Hibernate框架介绍以及入门 【二】 ...二、关于hibernate映射的配置 映射 1、【class标签的配置】 这个标签是来建立类与表(数据库)的映射关系 属性: name:类的一个全路径 table: 表名(类名如果和表名一致那么table可

    Hibernate注解用法

    @Entity 映射实体类 @Table 映射数句库表 @Entity(name="tableName") - 必须,注解将一个类声明为一个实体bean。 属性: name - 可选,对应数据库中的一个表。若表名与实体类名相同,则可以省略。 @Table(name="",...

    hibernate配置

    对应的持久化对象名" table="对应数据库中的表名"&gt; 数据库中表的主键名所对应的持久化对象中的属性名" column="对应数据库中表的主键名" type="java.lang.String(数据库中主键字段的数据类型)"&gt; ...

    Hibernate注解

    * 3.hilo 要在数据库中建立一张额外的表,默认表名为hibernate_unque_key,默认字段为integer类型,名称是next_hi(比较少用) * 例:@GeneratedValue(generator = "paymentableGenerator") * @GenericGenerator...

    java程序生成器 本软件生成Struts2.1.8,Spring2.5,Hibernate3代码

    本软件采用.Net2.0开发,请检查机器是否安装.net ...支持关系映射。 若想更好的利用此软件加快开发效率,减少成本,请遵循Hibernate规范。 例如: 表必须有主键。 表名、列名不使用关键字。 注: 新手不建议使用。

    hibernate框架环境x

    头信息就不多说了,首先写好一个hibernate-mapping首尾标记,在标记内映射我们相对应的实体类。在class标记的name属性的值对应我们的实体类(全路径),table属性对应我们在数据库的表名。id标记为我们数据库的主键...

    Grails 中文参考手册

    1. 简介 2. 起步 2.1 下载并安装Grails 2.2 创建一个Grails应用 2.3 Hello World示例 2.4 使用IDE 2.5 规约配置 2.6 运行Grails应用 2.7 测试Grails应用 ...15.1 通过Hibernate注释进行映射 15.2 深入了解 16. 脚手架

    《深入浅出MyBatis技术原理与实战》高清完整PDF下载

    本书详细介绍了MyBatis的基础组成、配置、映射器、动态SQL,教会读者正确使用MyBatis,书中包含大量的实例,使读者可以参考。接着介绍了MyBatis的运行原理和插件开发并配有一个完整的插件例子。为了增加实用性,作者...

    (高清+目录)深入浅出MyBatis技术原理与实战.zip

    本书详细介绍了MyBatis的基础组成、配置、映射器、动态SQL,教会读者正确使用MyBatis,书中包含大量的实例,使读者可以参考。接着介绍了MyBatis的运行原理和插件开发并配有一个完整的插件例子。为了增加实用性,作者...

    HibernateSynchronizer连接Oracle10g的小问题

    ibernateSynchronizer 连接...这样虽然能连接上了数据库,但是生成的hbm.xml没有各个字段与属性的映射。 在这里我们还要加一个过滤器,把系统表(表名带$)过滤掉,在Schema pattern 里面输入你的大写用户名即可

    SpringBoot中使用Spring-data-jpa分页查询

    手动创建一个对应数据表的实体类,并在实体类上使用@Entity注解标记该类是一个实体类,@Table注解指定该实体类映射的数据表名。 创建Repository接口 创建一个Repository接口,继承自JpaRepository或者...

    使用反射技术和Facade模式演示封装数据库操作--ORM原理

    如果以上两个条件成立,那么书写操作数据库的代码很简单:只需呼叫FacadeForDAO.findModel(表名)方法,在表名参数给出实际数据库中表的名称就可以返回一个包含对应POJO类的对象的集合--非常简单--输入表名得到Java...

    AndroidSQLite封装类

    利用Java反射机制实现Android数据库操作的封装,不用频繁对数据库进行操作,定义好一个实例类后,只需新增一行代码就能实现根据类名映射出相关的数据表名,列名,和相关的增删改查工作。类似于J2EE中的 Hibernate...

    jdbc基础和参考

    读取hibernate的配置文件和映射文件 3.构建SessionFactory对象 Transaction 1.事务管理对象 Query 1.查询对象,HQL Criteria 1.hibernate提供的更面向对象的一种查询方式。 准备工作: 1.java中的POJO对象存在...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    本网站以xp为Web平台,JSP+Ajax+Servlet+JavaBean+Hibernate为网站实现技术,建立基于MySQL数据库系统的核心动态网页,实现博客网站前台及博客个人维护管理等功能模块。 1、 系统处理的准确性和及时性:系统处理的...

Global site tag (gtag.js) - Google Analytics