映射继承关系-002继承关系树中的根类对应一个表(discriminatorsubclass)

Posted shamgod

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了映射继承关系-002继承关系树中的根类对应一个表(discriminatorsubclass)相关的知识,希望对你有一定的参考价值。

1.

技术分享

2.

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping
 3 PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping >
 6 
 7    <class name="mypack.Monkey" table="MONKEYS">
 8       <id name="id" type="long" column="ID">
 9         <generator class="increment"/>
10       </id>
11       <discriminator column="MONKEY_TYPE" type="string"  />  
12       <property name="name" type="string" column="NAME" />
13 
14       <many-to-one
15         name="team"
16         column="TEAM_ID"
17         class="mypack.Team"
18       />
19 
20       <subclass name="mypack.JMonkey" discriminator-value="JM" >
21          <property name="color" column="COLOR" type="string" />
22       </subclass>
23 
24       <subclass name="mypack.CMonkey" discriminator-value="CM" >
25          <property name="length" column="LENGTH" type="double" />
26       </subclass>
27      
28     </class>
29  
30 </hibernate-mapping>

 

3.

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping
 3 PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping >
 6 
 7   <class name="mypack.Team" table="TEAMS" >
 8     <id name="id" type="long" column="ID">
 9       <generator class="increment"/>
10     </id>
11 
12     <property name="name" type="string"  column="NAME" />
13     <set 
14         name="monkeys"
15         inverse="true"
16      >
17         <key column="TEAM_ID" />
18         <one-to-many class="mypack.Monkey" />
19      </set>   
20 
21   </class>
22 </hibernate-mapping>

 

4.

 1 package mypack;
 2 
 3 abstract public class Monkey{
 4 
 5     private Long id;
 6     private String name;
 7     private Team team;
 8 
 9     /** full constructor */
10     public Monkey(String name,Team team) {
11         this.name = name;
12         this.team = team;
13     }
14 
15     /** default constructor */
16     public Monkey() {
17     }
18 
19     public Long getId() {
20         return this.id;
21     }
22 
23     public void setId(Long id) {
24         this.id = id;
25     }
26 
27     public String getName() {
28         return this.name;
29     }
30 
31     public void setName(String name) {
32         this.name = name;
33     }
34 
35     public Team getTeam() {
36         return this.team;
37     }
38 
39     public void setTeam(Team team) {
40         this.team = team;
41     }
42 }

 

5.

 1 package mypack;
 2 
 3 public class CMonkey extends Monkey {
 4 
 5     private double length;
 6 
 7     /** full constructor */
 8     public CMonkey(String name, double length,Team team) {
 9         super(name,team);
10         this.length=length;
11         
12     }
13 
14     /** default constructor */
15     public CMonkey() {
16     }
17 
18    public double getLength() {
19         return this.length;
20     }
21 
22     public void setLength(double length) {
23         this.length = length;
24     }
25 }

 

6.

 1 package mypack;
 2 
 3 
 4 public class JMonkey extends Monkey{
 5 
 6     private String color;
 7 
 8     /** full constructor */
 9     public JMonkey(String name, String color,Team team) {
10         super(name,team);
11         this.color=color;
12     }
13 
14     /** default constructor */
15     public JMonkey() {
16     }
17 
18     public String getColor() {
19         return this.color;
20     }
21 
22     public void setColor(String color) {
23         this.color = color;
24     }
25     
26 }

 

7.

 1 package mypack;
 2 
 3 import java.util.Set;
 4 import java.util.HashSet;
 5 
 6 public class Team {
 7 
 8     private Long id;
 9     private String name;
10     private Set monkeys=new HashSet();
11 
12     /** full constructor */
13     public Team(String name, Set monkeys) {
14         this.name = name;
15         this.monkeys = monkeys;
16     }
17 
18     /** default constructor */
19     public Team() {
20     }
21 
22     /** minimal constructor */
23     public Team(Set monkeys) {
24         this.monkeys = monkeys;
25     }
26 
27     public Long getId() {
28         return this.id;
29     }
30 
31     public void setId(Long id) {
32         this.id = id;
33     }
34 
35     public String getName() {
36         return this.name;
37     }
38 
39     public void setName(String name) {
40         this.name = name;
41     }
42 
43     public Set getMonkeys() {
44         return this.monkeys;
45     }
46 
47     public void setMonkeys(Set monkeys) {
48         this.monkeys = monkeys;
49     }
50 }

 

8.

  1 package mypack;
  2 
  3 import org.hibernate.*;
  4 import org.hibernate.cfg.Configuration;
  5 import java.util.*;
  6 import java.sql.*;
  7 
  8 public class BusinessService{
  9   public static SessionFactory sessionFactory;
 10   static{
 11      try{
 12        Configuration config = new Configuration().configure();
 13        sessionFactory = config.buildSessionFactory();
 14      }catch(RuntimeException e){e.printStackTrace();throw e;}
 15 
 16   }
 17 
 18   public void saveMonkey(Monkey monkey) {
 19       Session session = sessionFactory.openSession();
 20       Transaction tx = null;
 21       List results=new ArrayList();
 22       try {
 23        tx = session.beginTransaction();
 24        session.save(monkey);
 25        tx.commit();
 26     }catch (RuntimeException e) {
 27       if (tx != null) {
 28         tx.rollback();
 29       }
 30       throw e;
 31     } finally {
 32       session.close();
 33     }
 34   }
 35 
 36 
 37   public List findAllJMonkeys(){
 38       Session session = sessionFactory.openSession();
 39       Transaction tx = null;
 40 
 41       try {
 42 
 43        tx = session.beginTransaction();
 44        List results=session.createQuery("from JMonkey").list();
 45        tx.commit();
 46        return results;
 47     }catch (RuntimeException e) {
 48       if (tx != null) {
 49         tx.rollback();
 50       }
 51       throw e;
 52     } finally {
 53       session.close();
 54     }
 55   }
 56 
 57   public List findAllMonkeys(){
 58       Session session = sessionFactory.openSession();
 59       Transaction tx = null;
 60 
 61       try {
 62        tx = session.beginTransaction();
 63        List results=session.createQuery("from Monkey").list();
 64        tx.commit();
 65        return results;
 66      }catch (RuntimeException e) {
 67       if (tx != null) {
 68         tx.rollback();
 69       }
 70       throw e;
 71     } finally {
 72       session.close();
 73     }
 74   }
 75 
 76   public Team loadTeam(long id){
 77       Session session = sessionFactory.openSession();
 78       Transaction tx = null;
 79       try {
 80        tx = session.beginTransaction();
 81        Team team=(Team)session.get(Team.class,new Long(id));
 82        Hibernate.initialize(team.getMonkeys());
 83       tx.commit();
 84       return team;
 85     }catch (RuntimeException e) {
 86       if (tx != null) {
 87         tx.rollback();
 88       }
 89       throw e;
 90     } finally {
 91       session.close();
 92     }
 93   }
 94 
 95    public void test(){
 96       List jMonkeys=findAllJMonkeys();
 97       printAllMonkeys(jMonkeys.iterator());
 98 
 99       List monkeys=findAllMonkeys();
100       printAllMonkeys(monkeys.iterator());
101 
102       Team team=loadTeam(1);
103       printAllMonkeys(team.getMonkeys().iterator());
104 
105       Monkey monkey=new JMonkey("Mary","yellow",team);
106       saveMonkey(monkey);
107 
108   }
109 
110   private void printAllMonkeys(Iterator it){
111      while(it.hasNext()){
112         Monkey m=(Monkey)it.next();
113         if(m instanceof JMonkey)
114           System.out.println(((JMonkey)m).getColor());
115         else
116           System.out.println(((CMonkey)m).getLength());
117       }
118   }
119   public static void main(String args[]) {
120     new BusinessService().test();
121     sessionFactory.close();
122   }
123 }

技术分享

9.

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <!DOCTYPE hibernate-configuration
 3  PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
 4  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 
 6 <hibernate-configuration>
 7     <session-factory>
 8         <property name="dialect">
 9             org.hibernate.dialect.mysqlDialect
10         </property>
11         <property name="connection.driver_class">
12             com.mysql.jdbc.Driver
13         </property>
14         <property name="connection.url">
15             jdbc:mysql://localhost:3306/sampledb
16         </property>
17         <property name="connection.username">
18             root
19         </property>
20         <property name="connection.password">
21             1234
22         </property>
23 
24         <property name="show_sql">true</property>
25 
26         <mapping resource="mypack/Team.hbm.xml" />
27         <mapping resource="mypack/Monkey.hbm.xml" />
28     </session-factory>
29 </hibernate-configuration>

 

10.

 1 drop database if exists SAMPLEDB;
 2 create database SAMPLEDB;
 3 use SAMPLEDB;
 4 
 5 create table TEAMS (
 6    ID bigint not null,
 7    NAME varchar(15),
 8    primary key (ID)
 9 );
10 create table MONKEYS (
11    ID bigint not null,
12    NAME varchar(15),
13    MONKEY_TYPE varchar(2),
14    COLOR varchar(15),
15    LENGTH double precision,
16    TEAM_ID bigint,
17    primary key (ID)
18 );
19 
20 alter table MONKEYS add index IDX_TEAM(TEAM_ID), add constraint FK_TEAM foreign key (TEAM_ID) references TEAMS (ID);
21 
22 insert into TEAMS(ID,NAME) values(1,‘ABC Company‘);
23 
24 insert into MONKEYS(ID,MONKEY_TYPE,NAME,COLOR,LENGTH,TEAM_ID) values(1,‘JM‘,‘Tom‘,‘yellow‘,null,1);
25 
26 insert into MONKEYS(ID,MONKEY_TYPE,NAME,COLOR,LENGTH,TEAM_ID) values(2,‘JM‘,‘Mike‘,‘orange‘,null,1);
27 
28 insert into MONKEYS(ID,MONKEY_TYPE,NAME,COLOR,LENGTH,TEAM_ID) values(3,‘CM‘,‘Jack‘,null,1.2,1);
29 
30 insert into MONKEYS(ID,MONKEY_TYPE,NAME,COLOR,LENGTH,TEAM_ID) values(4,‘CM‘,‘Linda‘,null,2.0,1);

 

以上是关于映射继承关系-002继承关系树中的根类对应一个表(discriminatorsubclass)的主要内容,如果未能解决你的问题,请参考以下文章

hibernate 表关系映射详解之继承关系

CSS的继承与优先级

hibernate笔记--继承映射关系的三种实现方式

Java面向对象的三大特点

Hibernate中的Entity类之间的继承关系之一MappedSuperclass

hibernate 继承映射