使用Hibernate做一对多的实体映射(使用面向对象的方式设计表)
来源:互联网 发布:少女终末旅行 知乎 编辑:程序博客网 时间:2024/05/22 03:02
在是使用hibernate一对一的映射关系,如果接触过hibernate的人来说并不陌生,现在我们假设有这样的一个场景
比方说我们要存储学生和老师这两个对象的信息,学生信息,与老师的信息有大部分都是重复的,如果以面向对象的
设计思想来说,我们可以将这部分共有的属性抽象出来一个人类,这样一来我们由原来的两个对象,现在成了三个对象了,肯定会有人说,这样会有什么好处,好处是如果修改人类属性将会影响学生与老师,以便于维护:现在我们来实现刚才的场景我们建两张表
创建teacher表
create table person(
id varchar(23) not null primary key,
username varchar(20) not null,
userage int,
sex varchar(2)
)
create table teacher(
id varchar(23) not null primary key,
pay int
)
create table student(
id varchar(23) not null primary key,
score int
)
我们现在看到的这三张表我们现在要些实体pojo类,写pojo类前我们要看一下表person他是teacher以及student的父类,
在写这个teacher对象以及student对象也要在pojo中体现出来
写person pojo类
public class Person{
private String id;
private String username;
private int userage,
private String sex;
// 生成get,Set方法我在这里就不写了
}
现在我们要写teacher和student对象的pojo类,我们已经很清楚的知道teacher与student是person对象的派生类
我们要在pojo中体现
写teacher pojo类
public class Teacher extends Person{
private int pay;
// 生成get,Set方法我在这里就不写了
}
写student pojo类
public class Student extends Person{
private int score;
// 生成get,Set方法我在这里就不写了
}
现在主要写pojo映射文件 Person.hbm.xml
<hibernate-mapping package="org.raindrop.hibernate04">
<class name="TItem" table="TITEM">
<id name="id" column="ID" type="string">
<generator class="assigned" />
</id>
<property name="username" column="username" type="java.lang.String" not-null="true" />
<property name="userage" column="userage" type="java.lang.Integer" />
<property name="sex" column="sex" type="java.lang.String" />
<joined-subclass name="org.raindrop.hibernate04.Teacher" table="teacher">
<key column="ID"></key>
<property name="pay" type="java.lang.Integer" column="pay"></property>
</joined-subclass>
<joined-subclass name="org.raindrop.hibernate04.Student" table="student">
<key column="ID"></key>
<property name="score" type="java.lang.Integer" column="score"></property>
</joined-subclass>
</class>
</hibernate-mapping>
建立父类与子类的关系(重点所在)
<joined-subclass name="" table="" > 属性name指的是pojo派生的类 table=""指定的是表名
<key column="id"></key> 通过id将person与person的派生类关联起来
<property name="pay" type="java.lang.Integer" column="pay"></property> 派生类中的属性
操作类PersonOperate.java //teacher和student都是person的子类
public void insert(Person person)
{
this.session.save(person) ;
this.session.beginTransaction().commit() ;
this.session.close() ;
}
// 进行按ID查询操作
public Person queryById(String id)
{
Person person = null ;
String hql = "FROM TItem AS t WHERE t.id=?" ;
Query q = this.session.createQuery(hql);
q.setString(0,id) ;
Iterator iter = q.list().iterator() ;
if(iter.hasNext())
{
person = (TItem)iter.next() ;
}
return person;
}
测试类 向表中插入数据(student对象可以这样插入数据)
PersonOperate po = new PersonOperate() ;
Teacher t=new Teacher();
t.SetId("A100");
t.SetUsername("zhangshan");
t.SetUserage(22);
t.SetSex("男");
t.SetPay(5000);
po.insert(t) ;
向表查询数据
Teacher tea =(Teacher)po.queryById("A100");
System.out.println(tea.getId()+" "+tea.getUsername());
- 使用Hibernate做一对多的实体映射(使用面向对象的方式设计表)
- Hibernate高级实体关联映射之多值的实体关联(一对多关联,使用bag)
- Hibernate高级实体关联映射之多值的实体关联(一对多关联,使用list)
- Hibernate高级实体关联映射之多值的实体关联(一对多关联,使用set)
- Hibernate高级实体关联映射之多值的实体关联(一对多关联,使用map)
- Hibernate实体映射——单边的一对多关系
- 【Hibernate框架】使用链接表的关联映射(一对多/多对一、单/双向映射)
- Hibernate高级实体关联映射之多值的实体关联(一对多关联,利用联结表,set例)
- Hibernate高级实体关联映射之多值的实体关联(一对多关联,利用联结表,bag例)
- Hibernate高级实体关联映射之多值的实体关联(一对多关联,利用联结表,idbag例)
- Hibernate高级实体关联映射之多值的实体关联(一对多关联,利用联结表,list例)
- Hibernate高级实体关联映射之多值的实体关联(一对多关联,利用联结表,map例)
- 使用ibatis映射实体间一对多、多对一的关系
- Hibernate的一对多映射
- 关于一对多的实体映射
- 关于hibernate中一对多映射 list 和set映射的使用区别
- 关于hibernate中一对多映射 list 和set映射的使用区别
- Hibernate使用List实现一对多映射
- 花了点时间弄了个带相应事件的FTP类(C#)
- Jsp/Java Web 开发环境搭建,MyEclipse 开发环境搭建
- 马化腾:腾讯看走眼YouTube 现在学习Facebook
- javascript 之 select下拉框
- xp样式按钮
- 使用Hibernate做一对多的实体映射(使用面向对象的方式设计表)
- WM_IDLEUPDATECMDUI,WM_KICKIDLE消息
- ADSL上网常见问题锦集
- c#写的虚拟机成功运转了
- Note-------------substring
- 全球首部Google手机亮相 未采用Android系统(图文)
- .net自动生成表格解决方案
- SCO UNIX 3.2 5.0.7 386 下安装IDS Informix_Online Dynamic Server 7.23.UC13-1
- 创建虚拟目录