Hibernate逍遥游记-第10章 映射继承关系-003继承关系树中的每个类对应一个表(joined-subclass)
2016-03-20 18:05
567 查看
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
2.
<?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 > <class name="mypack.Monkey" table="MONKEYS"> <id name="id" type="long" column="ID"> <generator class="increment"/> </id> <property name="name" type="string" column="NAME" /> <many-to-one name="team" column="TEAM_ID" class="mypack.Team" /> <joined-subclass name="mypack.JMonkey" table="JMONKEYS" > <key column="MONKEY_ID" /> <property name="color" column="COLOR" type="string" /> </joined-subclass> <joined-subclass name="mypack.CMonkey" table="CMONKEYS" > <key column="MONKEY_ID" /> <property name="length" column="LENGTH" type="double" /> </joined-subclass> </class> </hibernate-mapping>
3.
<?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 > <class name="mypack.Team" table="TEAMS" > <id name="id" type="long" column="ID"> <generator class="increment"/> </id> <property name="name" type="string" column="NAME" /> <set name="monkeys" inverse="true" > <key column="TEAM_ID" /> <one-to-many class="mypack.Monkey" /> </set> </class> </hibernate-mapping>
4.
package mypack; abstract public class Monkey { private Long id; private String name; private Team team; /** full constructor */ public Monkey(String name,Team team) { this.name = name; this.team = team; } /** default constructor */ public Monkey() { } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Team getTeam() { return this.team; } public void setTeam(Team team) { this.team = team; } }
5.
package mypack; import java.io.Serializable; public class CMonkey extends Monkey { private double length; /** full constructor */ public CMonkey(String name, double length,Team team) { super(name,team); this.length=length; } /** default constructor */ public CMonkey() { } public double getLength() { return this.length; } public void setLength(double length) { this.length = length; } }
6.
package mypack; public class JMonkey extends Monkey{ private String color; /** full constructor */ public JMonkey(String name, String color,Team team) { super(name,team); this.color=color; } /** default constructor */ public JMonkey() { } public String getColor() { return this.color; } public void setColor(String color) { this.color = color; } }
7.
package mypack; import java.util.Set; import java.util.HashSet; public class Team { private Long id; private String name; private Set monkeys=new HashSet(); /** full constructor */ public Team(String name, Set monkeys) { this.name = name; this.monkeys = monkeys; } /** default constructor */ public Team() { } /** minimal constructor */ public Team(Set monkeys) { this.monkeys = monkeys; } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Set getMonkeys() { return this.monkeys; } public void setMonkeys(Set monkeys) { this.monkeys = monkeys; } }
8.
package mypack; import org.hibernate.*; import org.hibernate.cfg.Configuration; import java.util.*; import java.sql.*; public class BusinessService{ public static SessionFactory sessionFactory; static{ try{ Configuration config = new Configuration().configure(); sessionFactory = config.buildSessionFactory(); }catch(RuntimeException e){e.printStackTrace();throw e;} } public void saveMonkey(Monkey monkey){ Session session = sessionFactory.openSession(); Transaction tx = null; List results=new ArrayList(); try { tx = session.beginTransaction(); session.save(monkey); tx.commit(); }catch (RuntimeException e) { if (tx != null) { tx.rollback(); } throw e; } finally { session.close(); } } public List findAllJMonkeys(){ Session session = sessionFactory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); List results=session.createQuery("from JMonkey").list(); tx.commit(); return results; }catch (RuntimeException e) { if (tx != null) { tx.rollback(); } throw e; } finally { session.close(); } } public List findAllMonkeys(){ Session session = sessionFactory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); List results=session.createQuery("from Monkey").list(); tx.commit(); return results; }catch (RuntimeException e) { if (tx != null) { tx.rollback(); } throw e; } finally { session.close(); } } public Team loadTeam(long id){ Session session = sessionFactory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); Team team=(Team)session.get(Team.class,new Long(id)); Hibernate.initialize(team.getMonkeys()); tx.commit(); return team; }catch (RuntimeException e) { if (tx != null) { tx.rollback(); } throw e; } finally { session.close(); } } public void test(){ List jMonkeys=findAllJMonkeys(); printAllMonkeys(jMonkeys.iterator()); List monkeys=findAllMonkeys(); printAllMonkeys(monkeys.iterator()); Team team=loadTeam(1); printAllMonkeys(team.getMonkeys().iterator()); Monkey monkey=new JMonkey("Mary","yellow",team); saveMonkey(monkey); } private void printAllMonkeys(Iterator it){ while(it.hasNext()){ Monkey m=(Monkey)it.next(); if(m instanceof JMonkey) System.out.println(((JMonkey)m).getColor()); else System.out.println(((CMonkey)m).getLength()); } } public static void main(String args[]) { new BusinessService().test(); sessionFactory.close(); } }
9.
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="connection.url"> jdbc:mysql://localhost:3306/sampledb </property> <property name="connection.username"> root </property> <property name="connection.password"> 1234 </property> <property name="show_sql">true</property> <mapping resource="mypack/Team.hbm.xml" /> <mapping resource="mypack/Monkey.hbm.xml" /> </session-factory> </hibernate-configuration>
10.
drop database if exists SAMPLEDB; create database SAMPLEDB; use SAMPLEDB; create table TEAMS ( ID bigint not null, NAME varchar(15), primary key (ID) ); create table MONKEYS ( ID bigint not null, NAME varchar(15), TEAM_ID bigint, primary key (ID) ); create table JMONKEYS ( MONKEY_ID bigint not null, COLOR varchar(15), primary key (MONKEY_ID) ); create table CMONKEYS ( MONKEY_ID bigint not null, LENGTH double precision, primary key (MONKEY_ID) ); alter table MONKEYS add index IDX_TEAM(TEAM_ID), add constraint FK_TEAM foreign key (TEAM_ID) references TEAMS (ID); alter table JMONKEYS add index IDX_MONKEY1(MONKEY_ID), add constraint FK_MONKEY1 foreign key (MONKEY_ID) references MONKEYS (ID); alter table CMONKEYS add index IDX_MONKEY2(MONKEY_ID), add constraint FK_MONKEY2 foreign key (MONKEY_ID) references MONKEYS (ID); insert into TEAMS(ID,NAME) values(1,'NBA'); insert into MONKEYS(ID,NAME,TEAM_ID) values(1,'Tom',1); insert into JMONKEYS(MONKEY_ID,COLOR) values(1,'yellow'); insert into MONKEYS(ID,NAME,TEAM_ID) values(2,'Mike',1); insert into JMONKEYS(MONKEY_ID,COLOR) values(2,'orange'); insert into MONKEYS(ID,NAME,TEAM_ID) values(3,'Jack',1); insert into CMONKEYS(MONKEY_ID,LENGTH) values(3,1.2); insert into MONKEYS(ID,NAME,TEAM_ID) values(4,'Linda',1); insert into CMONKEYS(MONKEY_ID,LENGTH) values(4,2.0);
11.
相关文章推荐
- RocEDU.阅读.写作《霍乱时期的爱情》书摘(一)
- 谈谈我的个人追求
- genymotion+VirtualBox创建android模拟器
- HTML5 Canvas画布,画出直角三角形
- minecraft生存指南
- C常用字符串处理函数
- 等分按钮(特别适合移动端)
- centos安装git高版本报错
- java集合框架
- STL源码剖析--概述
- 仿豆果美食tableview的展开和收缩效果
- 常用工具记录
- 第四周项目五 求两个数最大公约数
- golang tcp heartbeat
- poj 1502 单源最短路径
- Python 第七篇:异步IO\数据库\队列\缓存
- codevs 4310 复制书稿
- 针对移动互联网用户行为习惯分析来进行内容精准个性化推送的服务
- 数据库术语
- HDU【1260】Tickets