Hibernate--继承映射
来源:互联网 发布:幸运飞艇源码下载 编辑:程序博客网 时间:2024/06/06 06:54
1 多个结构整合到一张表中
1.1 比如Person类为父类,Teacher类和Student类均继承中,讲三个类生产一张表。
表结构说明:
public class Person { private Integer id; private String name;//省略get与setpublic class Student extends Person{ private String work;//省略get与setpublic class Teacher extends Person{ private Integer salary;//省略get与set
映射文件:
<class name="Person" table="person"> <id name="id" type="integer" column="id"> <generator class="native"></generator> </id> <!-- 鉴别器 区分student金额teacher的--> <!-- 应该放在id和composite的后面 --> <discriminator column="type" type="string"/> <property name="name"/> <!-- 子类 discriminator-value设置一个值由框架里帮助我们生成--> <subclass name="Student" discriminator-value="s"> <property name="work"/> </subclass> <!-- 子类 --> <subclass name="Teacher" discriminator-value="t"> <property name="salary"/> </subclass> </class>
discriminator 标签为鉴别器,必须放在id和composite后,用来区分子类,各个子类中设置属性discriminator-value来区分具体子类。即为type赋值。
生产的表结构:
1.2 添加数据
Session session = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction(); Student student=new Student(); student.setId(1); student.setName("小强"); student.setWork("写作业"); Teacher teacher=new Teacher(); teacher.setId(2); teacher.setName("小张"); teacher.setSalary(1000); session.save(student); session.save(teacher); tx.commit();
各个对象单独存储,框架根据配置文件中的配置discriminator-value自动为设置的区分字段赋值。
执行上述代码后产生的数据为:
特别要注意红色的方框框中的内容,都是框架根据配置文件中的内容来自动生成的。
2 每个具体类一张表
同样是三个类,一个父类Person,两个子类Teacher类、Student类。其中的属性同上。
配置 文件:
<!-- 定义abstract="true"后将假定该父类为抽象类,不会产生该表 --> <class name="Person" table="person" abstract="true"> <id name="id" type="integer" column="id"> <generator class="assigned"></generator> </id> <property name="name"/> <union-subclass name="Student" table="student"> <property name="work"/> </union-subclass> <union-subclass name="Teacher" table="teacher"> <property name="salary"/> </union-subclass> </class>
不允许在父类中使用标示生成策略,建议使用UUID、assigned。
将产生三张表,两个子类将会继承父类中的字段,生成的表结构:
插入数据:
Session session = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction(); Student student=new Student(); student.setId(1); student.setName("小强"); student.setWork("写作业"); Teacher teacher=new Teacher(); teacher.setId(2); teacher.setName("小张"); teacher.setSalary(1000); session.save(student); session.save(teacher); tx.commit();
3 每个子类一张表,
每一子类将会只存在在中已定义的字段。
<class name="Person" table="person" abstract="true"> <id name="id" column="id"> <generator class="assigned"></generator> </id> <discriminator column="type" type="string"/> <property name="name"/> <subclass name="Student" discriminator-value="s"> <join table="student"> <key column="id"/> <property name="work"/> </join> </subclass> <subclass name="Teacher" discriminator-value="t"> <join table="teacher"> <key column="id"/> <property name="salary"/> </join> </subclass> </class>
生成的表结构:
阅读全文
0 0
- Hibernate高级映射 --- 继承映射
- Hibernate高级映射--继承映射
- Hibernate高级映射-继承映射
- Hibernate映射解析---继承映射
- Hibernate映射解析---继承映射
- Hibernate映射解析---继承映射
- Hibernate 简化继承映射
- Hibernate 简化继承映射
- Hibernate 简化继承映射
- Hibernate 简化继承映射
- Hibernate 简化继承映射
- Hibernate 简化继承映射
- Hibernate的继承映射
- hibernate继承映射2
- Hibernate 继承关系映射
- hibernate继承映射
- hibernate总结---继承映射
- Hibernate继承映射(1)
- servlet实现文件下载
- SQL语句的基本常用的一些语法
- 用两个栈实现队列
- java中文参数乱码解决方案
- Docker常用命令和实战演练
- Hibernate--继承映射
- 分布式锁1 Java常用技术方案
- shell脚本在容器云中搭建hadoop集群(五)
- 五、(1)VS2010+Opencv-2.4 简单配置
- win下pip在python2和python3兼容性配置
- caffe2 教程入门(python版)
- HDU
- 【Java虚拟机】之三 Class类文件结构
- 伪静态的实现方法