20160509-hibernate--继承映射
<class name="Employee" table="employee" discriminator-value="0">
<id name="id">
<generator class="native"/>
</id>
<discriminator column="type" type="int"/>
<property name="name"/>
<many-to-one name=”depart” column=”depart_id”/>
<subclass name="Skiller" discriminator-value="1">
<property name=”skill”/>
</subclass>
<subclass name="Sales" discriminator-value="2">
<property name="sell"/>
</subclass>
</class>
package com.dzq.domain; import java.io.Serializable; public class Employee implements Serializable{
private int id;
private String name;
private Department depart; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Department getDepart() {
return depart;
} public void setDepart(Department depart) {
this.depart = depart;
} }
子类:
package com.dzq.domain; public class Sales extends Employee {
private int sell; public int getSell() {
return sell;
} public void setSell(int sell) {
this.sell = sell;
} }
package com.dzq.domain; public class Skiller extends Employee {
private String skiller; public String getSkiller() {
return skiller;
} public void setSkiller(String skiller) {
this.skiller = skiller;
} }
映射关系:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.dzq.domain"> <class name="Employee" table="employee" discriminator-value="0">
<id name="id" column="id">
<generator class="native" />
</id>
<discriminator column="type"/>
<property name="name" column="name" />
<many-to-one name="depart" column="depart_id" />
<subclass name="Skiller" discriminator-value="1">
<property name="skiller"/>
</subclass>
<subclass name="Sales" discriminator-value="2">
<property name="sell"/>
</subclass>
</class> </hibernate-mapping>
测试代码:
package com.dzq.test; import java.util.HashSet;
import java.util.Set; import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction; import com.dzq.domain.Department;
import com.dzq.domain.Employee;
import com.dzq.domain.Sales;
import com.dzq.domain.Skiller;
import com.dzq.utils.HibernateUntils; public class ManyToOne { public static void main(String[] args) {
add();
query(2);
}
public static void addEmAndDe(){
Employee em=new Employee();
Department depart=new Department();
depart.setName("FBI");
em.setDepart(depart);
em.setName("AK47");
HibernateUntils.add(depart);
HibernateUntils.add(em);
} public static void add(){
Session s=null;
Transaction ts=null;
try { Department dep=new Department();
dep.setName("FBI");
Employee e1=new Employee();
Skiller e2=new Skiller();
Sales e3=new Sales();
e1.setName("hi");
e1.setDepart(dep);
e2.setName("hello");
e2.setDepart(dep);
e2.setSkiller("skill");
e3.setName("fuck");
e3.setDepart(dep);
e3.setSell(100);
Set<Employee> empls=new HashSet<Employee>();
empls.add(e1);
empls.add(e2);
empls.add(e3);
dep.setEmpls(empls);
s=HibernateUntils.getSession();
ts=s.beginTransaction();
s.save(dep);
s.save(e1);
s.save(e2);
s.save(e3); ts.commit();
} catch (Exception e) {
ts.rollback();
throw new RuntimeException(e);
}finally{
if(s!=null){
s.close();
}
}
} public static Employee query(int id){
Session s=null;
try{
s=HibernateUntils.getSession();
Employee emp=(Employee) s.get(Employee.class, id);
//Hibernate.initialize(emp.getDepart());
System.out.println(emp.getClass());
return emp;
}finally{
if(s!=null){
s.close();
}
}
} }
表结构
2、每个子类一张表(joined-subclass) (表结构)
<class name="Employee" table="employee">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<joined-subclass name="Skiller" table="skiller">
<key column="employee_id"/>
<property name="skill"/>
</joined-subclass>
<joined-subclass name="Sales" table="sales">
<key column="employee_id"/>
<property name="sell"/>
</joined-subclass>
</class>
<class name="Employee" table="employee">
<id name="id">
<generator class="native"/>
</id>
<discriminator column="type"/>
<property name="name"/>
<subclass name="Skiller">
<property name="net"/>
</subclass>
<subclass name=”Sales”">
<join table="sales">
<key column="employee_id"/>
<property name="sell"/>
</join>
</subclass>
</class>
<class name="Employee" abstract="true">
<id name="id">
<generator class="hilo"/>
</id>
<property name="name"/>
<union-subclass name="Skiller" table="skiller">
<property name="skill"/>
</union-subclass>
<union-subclass name="Sales" table="sales">
<property name="sell"/>
</union-subclass>
</class>
20160509-hibernate--继承映射的更多相关文章
- 【JavaEE】Hibernate继承映射,不用多态查询只查父表的方法
几个月前,我在博问里面发了一个问题:http://q.cnblogs.com/q/64900/,但是一直没有找到好的答案,关闭问题以后才自己解决了,在这里分享一下. 首先我重复一下场景,博问里面举的动 ...
- hibernate 继承映射关系( SINGLE_TABLE)
三种继承映射关系. 1,SINGLE_TABLE person student teacher 在一个表中,student和teacher继承自person,通过一个Discriminato ...
- Hibernate继承映射(@Inheritance)
继承映射在 Annotation 中使用 @Inheritance 注解,并且需要使用 strategy 属性指定继承策略,继承策略有 SINGLE_TABLE.TABLE_PER_CLASS 和 J ...
- SSH开发实践part3:hibernate继承映射
0 大家好.上次讲了关于hibernate中双向1-N的映射配置,可以参考:http://www.cnblogs.com/souvenir/p/3784510.html 实际项目中,对象间的关系比较复 ...
- Hibernate继承映射
在面向对象的程序领域中,类与类之间是有继承关系的,例如Java世界中只需要extends关键字就可以确定这两个类的父子关系,但是在关系数据库的世界中,表与表之间没有任何关键字可以明确指明这两张表的父子 ...
- web进修之—Hibernate 继承映射(5)
先看三个类的继承关系,Payment是父类,CashPayment和CreditCardPayment是Payment的子类: view plaincopy to clipboardprint p ...
- Hibernate 继承映射可能会遇到的错误
问题: 我们在配置hibernate的时候,默认是会配置下面的两个属性的 <property name="hibernate.default_catalog">hibe ...
- hibernate 继承映射关系( JOINED)
一个主表,其他的表每个都有自己的表来装填自己特有的部分,共同的部分就放在主表中. package com.bjsxt.hibernate; import javax.persistence.Ent ...
- hibernate 继承映射关系( TABLE_PER_CLASS)
Person,Student,Teacher各创建一个表,主键用一个中间表生成. package com.bjsxt.hibernate; import javax.persistence.Ent ...
- Hibernate 继承映射
@Entity@Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorColumn()public class Animal ...
随机推荐
- 洛谷 P1373 小a和uim之大逃离
2016-05-30 12:31:59 题目链接: P1373 小a和uim之大逃离 题目大意: 一个N*M的带权矩阵,以任意起点开始向右或者向下走,使得奇数步所得权值和与偶数步所得权值和关于K的余数 ...
- yum cdh4
cdh4 install for Centos6那个最美的年代,最好的时光,一路梦想,一路流泪,流的不会是懦弱的泪,而是对奋斗的寄于;1,repo配置>>>/etc/yum.repo ...
- hdoj 2031 进制转换
进制转换 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- Oracle- 表的自增长创建
Oracle创建自增长要先写序列还要去写触发器,不像MSSQLSERVER那样方便.但也是麻烦,记录如下: Oracle中,可以为每张表的主键创建一个单独的序列,然后从这个序列中获取自动增加的标识符, ...
- C/C++中的变量作用域
#include <iostream> using namespace std; int i = 1;int j = 2; int main(){ int i = 9; //C/ ...
- UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。
tapGesture.delegate = self; - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shoul ...
- petshop4.0 具体解释之中的一个(系统架构设计)
前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有很多.Net与J2EE之争,很多数据是从微软的PetShop和Sun的PetStore而来.这样的争论不可避免带有浓厚的 ...
- java基础复习之对于String对象,能够使用“=”赋值,也能够使用newkeyword赋值,两种方式有什么差别?
String类型是实际工作中经经常使用到的类型,从数据类型上划分,String是一个引用类型,是API中定义的一个类.所以String类型的对象能够用new创建,比如String name=new S ...
- C 二叉树
二叉树表示法 P127页 /* typedef struct BiTNode { int data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTre ...
- Hibernate中SQLite方言
package com.lain.util; /** * 2013-7-25 * chongzhen_zhao * SQLite方言 */ import java.sql.Types; import ...