组件(Component)映射

Component(组件)是一个被包含的对象,它作为值类型被持久化,而非一个被引用的实体。“component(组件)”这一术语指的是面向对象的合成概念(而并不是系统构架层次上的组件的概念)。在hibernate中可借助Component节点的定义,完成对复杂数据表的细分。在hibernate语义中,将某个实例对象中的一个逻辑组成称为Component(组件)。Component(组件)与实体对象的根本差别就在于Componet(组件)没有标识符(identity),它作为一个逻辑组成完全从属于实体对象。

还是以我第一个hibernate实例为例来说明组件映射:

User实体类如下:

Java代码  
  1. package eg;
  2. public class User {
  3. private int id;
  4. private Name name;//Name是另一个类
  5. private Date birthday;
  6. //setter和getter方法省略
  7. }

Name类如下:

Java代码  
  1. package eg;
  2. public class Name {
  3. private String firstName;
  4. private String lastName;
  5. //省略setter和getter方法
  6. }

User.hbm.xml映射文件如下:

Xml代码  
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping>
  6. <class name="eg.User" >
  7. <id name="id" >
  8. <generator class="native" />
  9. </id>
  10. <component name="name">
  11. <property name="firstName" column="first_name" />
  12. <property name="lastName" column="last_name" />
  13. </component>
  14. <property name="birthday" />
  15. </class>
  16. </hibernate-mapping

测试类如下:

Java代码  
  1. public class TestUser {
  2. @Test
  3. public void test1(){
  4. Configuration config = new Configuration();
  5. config.configure();
  6. SessionFactory factory = config.buildSessionFactory();
  7. Session session = factory.openSession();
  8. Transaction tran = session.beginTransaction();
  9. User user = new User();
  10. Name name = new Name();
  11. name.setFirstName("long");
  12. name.setLastName("xiao");
  13. user.setName(name);
  14. user.setBirthday(new Date());
  15. session.save(user);
  16. tran.commit();
  17. session.close();
  18. }
  19. }

测试程序运行后,数据库中生成了user表,创建语句如下:

Sql代码  
  1. DROP TABLE IF EXISTS `test`.`user`;
  2. CREATE TABLE  `test`.`user` (
  3. `id` int(11) NOT NULL AUTO_INCREMENT,
  4. `first_name` varchar(255) DEFAULT NULL,
  5. `last_name` varchar(255) DEFAULT NULL,
  6. `birthday` datetime DEFAULT NULL,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

数据库中记录如下所示:

+----+------------+-----------+----------+
| id | first_name | last_name | birthday |
+----+------------+-----------+----------+
|  1 | long       | xiao      | NULL     |
+----+------------+-----------+----------+
1 row in set (0.00 sec)

Hibernate组件(Component)映射相关推荐

  1. Hibernate 、多表关联映射-组件关联映射(component)

    组件关联映射可以将一些简小的数据与主题放在一个表中,例如firstName 和LastName这两个结合在一起可以组成一个名字,但是再分别将这两个再建一个表就不太合适了,这个时候可以用到组件关联映射: ...

  2. 初识Hibernate之关联映射(一)

    上篇文章我们对持久化对象进行的学习,了解了它的三种不同的状态并通过它完成对数据库的映射操作.但这都是基于单张表的操作,如果两张或者两张以上的表之间存在某种关联,我们又该如何利用持久化对象进行操作呢?本 ...

  3. Hibernate - 对象关系映射文件(*.hbm.xml)详解

    对象关系映射文件,即POJO 类和数据库的映射文件*.hbm.xml(映射文件的扩展名为 .hbm.xml). POJO 类和关系数据库之间的映射可以用一个XML文档来定义. 通过 POJO 类的数据 ...

  4. Hibernate多对多映射 - 连接表

    Hibernate多对多映射 - 连接表 今天我们将使用XML和注释配置来研究Hibernate多对多映射.之前我们看过如何在Hibernate中实现One To One和One To Many映射. ...

  5. Hibernate之继承映射

    Hibernate的继承映射可以理解为两个持久化类之间的继承关系    例如老师和人之间的关系 持久化类  Person类 public  class  Person { private   Inte ...

  6. Hibernate 主键维护策略和hibernate 常见的映射类型

    先配置Product.hbm.xml,最重要是在这个文件中 <?xml version="1.0" encoding="UTF-8"?> <! ...

  7. 三十七、深入Vue.js组件Component(下篇)

    @Author:Runsen @Date:2020/7/4 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  8. element vue 获取select 的label_Vue动态组件component的深度使用

    背景介绍 最近在封装一些基于Vue+ElementUI的组件,将一些实际项目中常用的,有一定规律的业务进行抽象总结,开发出相应的Vue组件. 组件封装 首先想到的就是Form组件,在Element U ...

  9. Hibernate 实体关联关系映射----总结

    http://lavasoft.blog.51cto.com/62575/39398 Hibernate 实体关联关系映射----总结 花了三天的业余时间,终于写完了Hibernate关联关系映射的所 ...

最新文章

  1. window.opener.document.getElementById(“a”)用标准的Jquery 语言怎么写
  2. cellpadding,cellspacing都是废弃的属性了,早已不推荐使用,最新的html5里已经彻底去掉了这些表现型的属性。
  3. uliweb新教程--多人博客系统开发
  4. python打包工具 --- pyinstaller
  5. 【笔记】MATLAB中的图形(2)
  6. java过去配置文件的值_java对.properties配置文件操作
  7. mysql查找无根节点sql_SQL 双亲节点查找所有子节点的实现方法
  8. em算法 实例 正态分布_Petuum提出序列生成学习算法通用框架
  9. jeecg社区第11期导师架构学习班开始报名了
  10. PyTorch 1.0 中文官方教程:使用ONNX将模型从PyTorch传输到Caffe2和移动端
  11. 三星Galaxy Note 10最新消息:将取消所有实体按键
  12. 【SAS】REG过程详解
  13. AOP jdk动态代理
  14. easymock参数_EasyMock捕获参数
  15. Nginx防盗链、访问控制、解析php相关配置、Nginx代理
  16. dede产生.php,怎么加快织梦dedeCMS内容生成速度
  17. Adaptive让 Spark SQL 更高效更智能
  18. STM32_HAL_SPI_ADS1256调试记录
  19. php屏蔽微信网页投诉按钮,屏蔽微信(QQ)内置浏览器菜单中的投诉按钮
  20. 请领导过目文件怎么说_【文件夹】英文怎么说?

热门文章

  1. hdu4400 BFS+STL
  2. hdu4496并查集的删边操作
  3. 【数字信号处理】相关函数 ( 相关系数与相关函数 | 相关函数定义 )
  4. 【五线谱】变音记号 ( 升号 # | 降号 b | 重升号 x | 重降号 bb )
  5. 【Android 逆向】Android 逆向通用工具开发 ( 静态库项目中的网络操作核心类 CNetwork 分析 )
  6. 【Android 插件化】使用插件化引擎对应用进行重打包的恶意软件特征 ( 检测困难 | 成本低 | 恶意插件可更换 | 容易传播 )
  7. 【Android 插件化】静态分析应用 APK 安装包是否使用了插件化引擎 ( 虚拟化引擎运行特点 | 恶意软件特点 )
  8. 【Android 安全】DEX 加密 ( Java 工具开发 | 生成 dex 文件 | Java 命令行执行 )
  9. (五)Cisco dhcp snooping实例3-多交换机环境(DHCP服务器和DHCP客户端位于同VLAN)...
  10. layoutSubviews何时被调用