转:http://blog.csdn.net/derpvailzhangfan/article/details/1957946 ,感谢博主分享

Notes:hibernate元数据的运用;uuid的概念;java的反射机制,“因为抽象类无法new出对象来,所以就要用java反射机制”,“TcommTable tomm = (TcommTable) Class.forName(allName).newInstance();”;

hibernate继承关系映射大概有5种,这5种继承关系映射里面,我觉得最有效最常用的一种方式非常好.就说说这种吧.先来说说hibernate继承关系什么时候使用.

(1) hibernate继承关系什么时候使用?

很多例子都是说一个动物类,然后是老虎类啊,狮子类啊之类去继承动物类.例子很好,但是实际应用中我根据这个提出了一个完全可行的解决方案,很有成就感!

在项目里面,遇到这样一个问题,大概有30多张表,里面都有共性的字段,每张表都需要走审核流程,如果针对每张表都做相应的审核模块,代码重复不说,那工作量就大了.针对这个就需要用到hibernate继承关系映射了,所有共性的字段都提取出来,把审核模块做成公共的模块!这中间又涉及用到了java反射机制.

(2)开始例子

先把30多张表共性的字段整理出来, id主键字段(String 类型的 主键生成方式是uuid),因为uuid按着计算,据说得300年才能出现重复的数据,300年以后我早就入古了,软件维护找我,嘿嘿,连骨灰都没喽!得了,跑题了.......继续!

共有的字段:

id     varchar   32

fileName   varchar  100

audState    varchar  2

tableName  varchar  50 (这个字段存表名,表1的名字table1,就存table1,表2的名字table2,就存table2......反射时候用)

上面是所有表中共有的字段.再拿30多张表中的一张table1表来举例子吧.table1表里面自己特有的字段如下:

isDel   varchar  2

fileTypeId   int    4

code1   varchar   50

code2   varchar  50

code3   varchar  50

hibenrate继承关系映射开始了

把共有的字段提出来做一个配置文件TcommTable.hbm.xml

<?xml  version="1.0"?>

hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

上面的配置文件是抽象的abstract="true" .

要生成相应的po:

public abstract class TcommTableimplements Serializable {

private String id;

private String fileName;

private String tableName;

//生成set/get()方法

}

table1表特有的字段生成配置文件和po,都是TcommTable的子类

table1表的配置文件Table1.hbm.xml

<?xml  version="1.0"?>

hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

table1的po:

public class Table1extends TcommTable{

private String isDel;

private String fileTypeId;

private String code1;

private String code2;

private String code3;

//生成set/get()方法

}

(2)运用java的反射机制实现模块的共用性

当30多张表公用一个审核模块的时候,把抽象类TcommTable传到审核模块,如何知道这个抽象类是那张具体的表呢?就用到了java反射机制了,因为抽象类无法new出对象来,所以就要用java反射机制.

在审核的action里面实现java的反射机制,主要代码如下:

String tableName = request.getParameter("tableName");

String allName = "com.hibernate.po." + tableName;

TcommTable tomm = (TcommTable) Class.forName(allName).newInstance();

这样,就能得到table1所有的字段(公共字段和table1特有的字段),然后把要审核的内容放进tomm这个对象里面就行了.注意,java反射机制必须要带上类的完整包名,否则反射出错.tableName字段是区分30多张表的识别字段,通过这个字段,hibernate就自动可以判断出是哪个表和相应的类了,然后通过反射就能得到相应类的所有字段了,因为公共字段放在一个抽象类里面,抽象类无法new对象,所以只能通过反射机制来实现了.

java继承 映射_hibernate继承关系映射和java反射机制的运用相关推荐

  1. ef多条件映射_Hibernate一对一关系映射

    1.需求:新增一个用户时,同时增加身份证信息. 2.数据库设计: 3.说明:以上是基于外键的映射关系,将用户表主键 user_id作为身份证表的外键字段关联起来,作为单独的外键列,保存在数据库中,类似 ...

  2. hibernate mysql 映射_hibernate与mysql映射类型对应表与mysql导入导出

    http://blog.sina.com.cn/s/blog_5f240fc40100etlt.html 一.记录下hibernate mysql映射类型对应表: 1.常规Hibernate 映射 i ...

  3. java se与jdk的关系_JDK与Java SE/EE/ME的区别

    1. Java SE(Java Platform,Standard Edition). Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用 ...

  4. 鸿蒙对象关系映射数据库

    对象关系映射数据库 对象关系映射数据库简介 对象关系映射数据库存储开发步骤 1.添加配置 2.数据库的创建 3.数据表(实体对象类)的创建 4.使用对象数据操作接口OrmContext创建数据库 5. ...

  5. 详谈Hibernate框架关系映射!

    接触Hibernate也有一小段的时间了,愈发的觉得Hibernate是个神奇的东西,为什么这么说呢?因为你可以不懂一行sql,直接面向对象,就可以将数据直接保存到数据库去!! 你还可以保存一个对象, ...

  6. Hibernate 一对一关系映射总结篇

    在Hibernate 关系映射中一对一是比较常见也常用的一种,一对一的关系映射类型中又可分为:一对一外键单向映射.一对一外键双向映射.一对一主键单向映射和一对一主键双向映射. 下面就简单的说下自己对这 ...

  7. Java反序列化(一) - Java反射机制

    文章目录 写在前面 什么是java的反射机制? 通过Singleton获取实例 Runtime类 利用反射机制获取类对象 利用反射机制获取函数 执行方法 小结 通过Constructor获取实例 坑 ...

  8. Java - 反射机制

    Java反射机制 Java反射机制概述 理解Class类并获取Class实例 类的加载与ClassLoader的理解 创建运行时类的对象 获取运行时类的完整结构 调用运行时类的指定结构 反射的应用:动 ...

  9. 注解和反射详细笔记。自定义注解,元注解,内置注解。反射机制,Java Reflection,Java内存分析,反射操作注解,java.lang.reflect.Method,Class

    文章目录 注解 什么是注解 内置注解 元注解 自定义注解 反射机制 静态语言 vs 静态语言 Java Reflection 反射相关的主要API Class类 Java内存分析 创建运行时类的对象 ...

最新文章

  1. centos查看python版本_CentOS系统python默认版本由python2改为python3
  2. 小学生家庭教育与学习心理
  3. python绘制3d图形-Python基于matplotlib实现绘制三维图形功能示例
  4. java同一包protect_Java基础知识 - 欢迎来到夜故事,一个人的故事 - OSCHINA - 中文开源技术交流社区...
  5. python操作mongodb之六自定义类型存储
  6. 大规模数据处理开源软件
  7. 第一次连接mysql失败_MySQL 远程连接失败
  8. 4.2 SE38数据对象
  9. soidworks 生成PCD点云文件
  10. CSS 布局 - 水平 amp;amp; 垂直对齐,全面的水平垂直居中方案
  11. Java 垃圾收集策略、垃圾分代回收算法、垃圾回收运作流程
  12. IDEA JetBrains Mono 字体安装
  13. 日常消费软件记账项目
  14. 解决github下载及访问不稳定问题
  15. 趣味ACM题——圣骑士的斩杀
  16. 全智通A+常见问题汇总解答—A+库存盘点,点击生成盘点,生成错误的数据
  17. 还在期待安卓9.0吗?Android 10.0要来了
  18. 鸿蒙入门手册(二):应用是怎样运行的
  19. Android开发踩坑之旅
  20. 开机 米兔积木机器人_小米之家携手米兔积木机器人 开展编程表演赛

热门文章

  1. Gradle 的使用
  2. 团队项目个人进展——Day05
  3. php过滤html标签截取部分内容
  4. Java DNS查询内部实现
  5. 团队项目第一阶段冲刺站立会议4(4月21日)
  6. 进入Android Dalvik虚拟机之Dalvik指令集
  7. Android   Fragmnet的使用新体会
  8. Spring异常解决 java.lang.NullPointerException,配置spring管理hibernate时出错
  9. 用ssh建立机器之间的信任机制
  10. keytool生成证书_创建自签名ssl证书,Java生产jks证书