您的位置:首页 > 其它

Hibernate逍遥游记-第10章 映射继承关系-003继承关系树中的每个类对应一个表(joined-subclass)

2016-03-20 18:05 567 查看
1.





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.



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: