hibernate将每个类映射成表的继承
来源:互联网 发布:网络兼职诈骗案开庭 编辑:程序博客网 时间:2024/06/06 13:14
前面的一种方式是3个类放在一个表中,这样看上去不符合关系模型,但是效率快。所以就少第二种更加符合关系模型的方法。那就是将每一个类映射到每一个表。这样使表结构更加清晰。但是执行效率会比较低。
我还是写原来那个例子。
1. 基类
package com.fish.testdao;
public class Employee {
private Integerid;
private Stringname;
private Departmentdepartment;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
2.销售类
package com.fish.testdao;
public class Saleextends Employee{
private float money;
public float getMoney() {
return money;
}
public void setMoney(float money) {
this.money = money;
}
}
2. 技术工类
package com.fish.testdao;
public class Skill extends Employee{
private Stringkiller;
public String getKiller() {
return killer;
}
public void setKiller(String killer) {
this.killer = killer;
}
}
然后写一个xml
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEhibernate-mapping PUBLIC
"-//Hibernate/HibernateMapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<classname="com.fish.testdao.Employee"discriminator-value="0">
<idname="id" column="id"type="integer">
<generatorclass="increment"></generator>
</id>
<propertyname="name"></property>
<many-to-onename="department"></many-to-one>
<joined-subclassname="com.fish.testdao.Sale"table="sale">
<keycolumn="emp_id"></key>
<propertyname="money"></property>
</joined-subclass>
<joined-subclassname="com.fish.testdao.Skill"table="skill">
<keycolumn="emp_id"></key>
<propertyname="killer"></property>
</joined-subclass>
</class>
</hibernate-mapping>
joined-subclass这个就是可以将该类映射到另外一个表中,然后利用key和原来employee表的id相关联。这样2张表就建立了联系。
下面写一个测试类
package com.fish.domain;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.fish.testdao.Department;
import com.fish.testdao.Skill;
public class Test6 {
// 写一个得到session的模板
public static Session getMySession() {
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
SessionFactory factory = configuration.buildSessionFactory();
Session session = factory.openSession();
return session;
}
public static void add() {
Session session = getMySession();
Department department = new Department();
department.setName("财务部");
Skill skill = new Skill();
skill.setDepartment(department);
skill.setKiller("技工");
skill.setName("妮妮");
Transaction transaction = session.beginTransaction();
transaction.begin();
session.save(department);
session.save(skill);
transaction.commit();
session.close();
}
public static void query() {
String hql = "fromSkill";
Session session = getMySession();
Query query = session.createQuery(hql);
List<Skill> list = query.list();
for (Skill i : list) {
System.out.println(i.getName()+"是"+i.getKiller());
}
}
public static void main(String[] args) {
// add();
query();
}
}
我们看看数据库中的存储结果。
- hibernate将每个类映射成表的继承
- Hibernate继承映射--每个类一个数据表的实现案例
- Hibernate继承映射之每个类一张表
- Hibernate继承映射之每个具体类一张表
- hibernate继承映射策略之每个具体类一张表
- 将整个继承树映射到一张表&将每个类映射到每张表
- Hibernate映射类继承之每个类一张表(父子类都有各自的表,并共用一个映射文件)
- Hibernate映射类继承之每个带有隐式多态的具体类一张表(每个子类各一张表,有各自的映射文件)
- Hibernate映射类继承之每个带有联合的具体类一张表(每个子类各一张表,共用一个父类映射文件)
- 【SSH快速进阶】——Hibernate继承映射:每个类映射一张表
- 【SSH快速进阶】——Hibernate继承映射:每个具体类映射一张表
- Hibernate学习笔记:继承映射之每个类继承结构一张表
- Hibernate继承映射--每个子类一个数据表的实现案例
- Hibernate学习笔记:继承映射之每个子类一张表
- Hibernate继承映射方式之每个子类一张表
- hibernate继承映射策略之每个子类一张表
- Hibernate 继承关系映射——每个类一个数据表
- Hibernate/JPA中的继承映射 实体extends的关系(每个子类独立一个表)
- java中遍历map的几种方法介绍
- 【MySQL】关于Repair by keyCache
- Windows socket 之WSAAsyncSelect模型
- Linux性能调优及监控
- css editor的冲突问题
- hibernate将每个类映射成表的继承
- ANSI C标准中有几个标准预定义宏(也是常用的):
- SldView嵌入式Linux集成开发环境
- hdoj 4578 线段树
- POJ 1625 Censored【AC自动机+DP+大数】
- 【BFS+DFS】hdu 1254 推箱子
- Firemonkey的旁门左道[一]
- set 删除某个特定值的用法
- poj 1056 IMMEDIATE DECODABILITY