博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate组件映射
阅读量:6986 次
发布时间:2019-06-27

本文共 3196 字,大约阅读时间需要 10 分钟。

 在Hibernate中联合主键的形成有两种可能:一种是由多对多映射形成的,多对多映射会形成第三张表,一般来说第三张表的主键是由其他两张表的主键构成的(比如学生表,课程表,选课表)。第二种情况就是很常见的情况,即只有一张表,表的主键是由本身的两个字段或以上构成的。比如:公司的财务统计表,其中有字段年份、月份、销售金额。在这张表中年份和月份才唯一确定一条记录。下面就来说说联合主键第二种情况的配置,就以上面的财务统计表来说明。对于联合主键的这种情况,我们经常把表中的主键字段提取出来单独作为一个类,其他字段则作为另一个类。对于财务统计表来说,我们则把年份和月份作为一个类SalDate,在另一个类则包含引用这个类和其他的字段。

假设我们有两个类,SalDate类表示联合主键(year、month),Total类(private int salTotal;private SalDate sd;)建完这两个类之后我们开始写Total.hbm.xml的配置文件:

 

运行下,出现下面结果:

create table t_salTotal (year integer not null, month integer not null, sTotal integer, primary key (year, month))

没有问题。下面我们插入几条数据测试下:

session = HibernateUtils.getSession();              //开启事务              tr = session.beginTransaction();              SalDate d1 = new SalDate();              d1.setMonth(12);              d1.setYear(2010);                            SalDate d2 = new SalDate();              d2.setMonth(12);              d2.setYear(2010);                            Total t1 = new Total();              t1.setSalTotal(10000);              t1.setSd(d1);                            Total t2 = new Total();              t2.setSalTotal(30000);              t2.setSd(d2);              session.save(t1);              session.save(t2);              tr.commit();

运行下:结果报错了:20:55:57,078  WARN RootClass:215 - composite-id class does not override hashCode(): com.fendou.hibernate.SalDate

组件映射:组件映射相对比较简单,所谓的组件就是一个被包含的对象。比如我们可以将通讯方式设置为一个组件,这个组件里面包含(QQ,MSN,Email,住址),而其他的对象皆可以使用这个组件,比如Teacher对象、Student对象。

组件对象代码如下:

package com.fendou.hibernate;  public class Component {      private String name;      private String tel;      private String address;      private String email;      public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }      public String getTel() {          return tel;      }      public void setTel(String tel) {          this.tel = tel;      }            public String getAddress() {          return address;      }      public void setAddress(String address) {          this.address = address;      }      public String getEmail() {          return email;      }      public void setEmail(String email) {          this.email = email;      }                    }

使用组件的Teacher对象如下:

 

package com.fendou.hibernate;  public class Teacher {      private int id;      private int sal;      public Component getComp() {          return comp;      }      public void setComp(Component comp) {          this.comp = comp;      }      private Component comp;      public int getId() {          return id;      }      public void setId(int id) {          this.id = id;      }        public int getSal() {          return sal;      }      public void setSal(int sal) {          this.sal = sal;      }        }

配置文件如下:

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Smile-123/p/5842816.html

你可能感兴趣的文章
RequestQueue
查看>>
Android TextView 属性设置
查看>>
html元素分类以及嵌套规则
查看>>
android dpi
查看>>
C语言的预处理、编译、汇编、链接
查看>>
魅族 C++ 微服务框架技术内幕揭秘
查看>>
flask 学习笔记 mvc ,sqlalchemy(insert,update)
查看>>
HTML基础(一)
查看>>
EGOImageView 解析
查看>>
我的友情链接
查看>>
1.解读REST和JAX-RS
查看>>
将RHEL7/centos7系统网卡名称eno16777736改为eth0
查看>>
Nginx域名跳转
查看>>
NTP时间服务器安装
查看>>
Thinkphp3.23 关联模型relation方法不存在解决方法
查看>>
bash脚本编程之一 条件判断及算术运算
查看>>
工作中非常逆天的shell命令
查看>>
我的友情链接
查看>>
[IOS]clang diagnostic、Wprotocol ..
查看>>
HTML4.01规范-HTML文档的顶层结构(3)
查看>>