09 Przykładowa aplikacjaid 7989 ppt

background image

Przykładowa aplikacja

Rafał Kasprzyk

background image

Rafał Kasprzyk

Diagram klas wybranej

dziedziny

Implementa

cja asocjacji

jednokierun

kowej

Implementa

cja asocjacji

dwukierunk

owej

background image

Rafał Kasprzyk

Asocjacja 1-N

public class Country {

private Long id;

private String name;

private Double area;

private Set militaryUnits;

public void setId(int id) {

this.id = id;

}

public int getId() {

return id;

}

// pozostałe metody setXXX i getXXX

}

<hibernate-mapping
package="pl.isolution.hibernate.army" >
<class name="Country" table="Country">

<set name="militaryUnits" inverse="true"
cascade="all">
<key column="COUNTRY_FK"/>
<one-to-many class="MilitaryUnit"/>
</set>

</class>
</hibernate-mapping>

Wszystkie operacje

(np. zapis, usuwanie,

…) propagują się na

obiekty podrzędne

tzw.

przechodnia

przechodnia

trwałość

trwałość

Drugi koniec

asocjacji

spowoduje

wygenerowanie

polecenia DML

(asocjacja

dwukierunkowa)

Country.ja
va

Country.hbm
.xml

background image

Rafał Kasprzyk

Asocjacja 1-N

public class MilitaryUnit {

private Long id;

private String name;

private Double potential;

private Integer soldiersNumber;

private Integer wounderSoldiersNumber;

private Integer killedSoldiersNumber;

private Byte moraleLevel;

private String description;

private MilitaryUnit superiorUnit;

private Country country;

private Set enquipments;

private Set resoutces;

// metody setXXX i getXXX

public boolean equals(Object obj)

{

if (obj == null) return false;

if (!(obj instanceof MilitaryUnit))

return false;

MilitaryUnit that = (MilitaryUnit) obj;

if (this.getId() == null || that.getId() == null)

return false;

return (this.getId().equals(that.getId()));

}

public int hashCode()

{

int value getId() == null ?

getName().hashCode : getId().hashCode();

return value;

}

}

MilitaryUnit.j
ava

Implementacje

wymagane, jeżeli

instancje klas trwałych

mają być

przechowywane w

zbiorach

Set

Set

background image

Rafał Kasprzyk

Asocjacja 1-N

<hibernate-mapping package="pl.isolution.hibernate.army"

>

<class name="MilitaryUnit" table="MilitaryUnit">

<id name="id" column="ID" type="long">

<generator class="increment" />

</id>

<property name= "name"/>

<property name= "potential"/>

<many-to-one name="superiorUnit"

column="SUPERIORUNIT_FK" class="MilitaryUnit" />

<many-to-one name="country"

column="COUNTRY_FK" class="Country" not-null= "true"/>

<set name="equipments" inverse="true" cascade="all">

<key column="MILITARY_UNIT_FK"/>

<one-to-many class="Equipment"/>

</set>

<set name="resources" inverse="true" cascade="all">

<key column="MILITARY_UNIT_FK"/>

<one-to-many class="Resources"/>

</set>

</class>

</hibernate-mapping>

MilitaryUnit.h
bm.xml

background image

Rafał Kasprzyk

Asocjacja 1-N

Session session = factory.openSession();
Transaction transaction = session.beginTransaction();

Country c = new Country();
c.setName("Poland" );
c.setArea(322.577);

c.setMilitaryUnits(new HashSet());

MilitaryUnit mu = new MilitaryUnit();
mu.setName("3pl");
mu.setSoldiersNumber(30);

mu.setCountry(c);
c.getMilitaryUnits().add(mu);

session.save(c);

transaction.commit();
session.close();

Dla asocjacji

dwukierunkowej należy

obsłużyć oba jej

końce!!!

Dzięki cascade="all"

zachowany będzie

również powiązany z c

obiekt mu

background image

Rafał Kasprzyk

Asocjacja dwukierunkowa –

metoda pomocnicza

public class Country {

public addUnit(MilitaryUnit mu){

if(mu.getCountry()!=null)

mu.getCountry()

.getMilitaryUnits().remove(mu);

mu.setCountry();

militaryUnits.add(mu);

}

}

W przypadku asocjacji

dwukierunkowej warto

zaimplementować metodę

pomocniczą

Country.
java

background image

Rafał Kasprzyk

Encje Equipment i Resources

public class Equipment {

private Long id;

private String name;

private Integer norm;

private Integer efficientNumber;

private Integer destroyedNumber;

private String description;

private MilitaryUnit militaryUnit;

public void setId(int id) {

this.id = id;

}

public int getId() {

return id;

}

// pozostałe metody setXXX i

getXXX

}

public class Resources{

private Long id;

private String name;

private Integer norm;

private Integer actualState;

private String measureUnit;

private String description;

private MilitaryUnit militaryUnit;

public void setId(int id) {

this.id = id;

}

public int getId() {

return id;

}

// pozostałe metody setXXX i

getXXX

}

Stworzenie plików mapowań

dla tych encji nie

stanowi już problemu

Equipment.
java

Resurces.j
ava

background image

Rafał Kasprzyk

Asocjacji N:N

background image

Rafał Kasprzyk

Asocjacja N-N

public class MilitaryUnit {

private Long id;

private String name;

private Set missions;

// metody setXXX i

getXXX

}

<hibernate-mapping package="pl.isolution.hibernate.army" >
<class name="MilitaryUnit" table="MilitaryUnit">

<set name="missions"
table= "MilitaryUnitOnMission"
cascade="save-update">
<key column="MILITARY_UNIT_FK"/>
<many-to-many class="Mission"

column="MISSION_FK"

/>

</set>

</class>
</hibernate-mapping>

MilitaryUnit.j
ava

MilitaryUnit.h
bm.xml

Nie możemy

pozwolić na

kaskadowe

usuwanie

background image

Rafał Kasprzyk

Asocjacja N-N

public class Mission {

private Long id;

private String name;

private Set militaryUnits;

// metody setXXX i getXXX

}

<hibernate-mapping package="pl.isolution.hibernate.army" >
<class name="Mission" table="Mission">

<set name="militaryUnits"
table= "MilitaryUnitOnMission"
inverse="true"
cascade="save-update">
<key column="MISSION_FK"/>
<many-to-many class="MilitaryUnit"

column="MISSION_UNIT_FK"

/>

</set>

</class>
</hibernate-mapping>

Mission.java

Mission.hbm
.xml

Drugi koniec

asocjacji

spowoduje

wygenerowanie

polecenia DML

(asocjacja

dwukierunkowa)

background image

Rafał Kasprzyk

Asocjacji N-N

Session session = factory.openSession();
Transaction transaction = session.beginTransaction();

MilitaryUnit mu = (MilitaryUnit)

session.get(MilitaryUnit.class, new Long(15));

Mission m = (Mission)

session.get(Mission.class, new Long(7));

m.getMilitaryUnits().add(mu);
mu.getMissions().add(m);

session.save(m);

transaction.commit();
session.close();

Dla asocjacji

dwukierunkowej należy

obsłużyć oba jej

końce!!!

Dzięki cascade="save-

update" zachowany

będzie również

powiązany z m obiekt mu

background image

Dziedziczenie

Rafał Kasprzyk

background image

Dziedziczenie

Rafał Kasprzyk

<hibernate-mapping package="model.uczelnia">
<class name="Osoba" table= "Osoba">
<id name="oid" column name="oid" type= "long">

<generator class="increment"/>

</id>
<property name="imie"/>
<property name="nazwisko"/>

<joined-subclass name="Student" table="Student">

<key column name="oid"/>

<property name="rok">

</joined-subclass>

</class>
</hibernate-mapping>

Osoba.hbm.x
ml

background image

Rafał Kasprzyk

Podsumowanie

Definicja obiektu trwałego

Deklaracja asocjacja 1-N

Deklaracja asocjacja N-N

Deklaracja i ”obsługa” asocjacji

dwukierunkowej

Deklaracja dziedziczenia


Document Outline


Wyszukiwarka

Podobne podstrony:
Wzor-09 Przyklad fragmentu mapy przegl. stanow pra 31 03 03, geodezja, EGIB
Kinesiology taping, teoria, metodyka, przykładowe aplikacje w konkretnych dysfunkcjach. Tiffert M(1)
09 Kody binarneid 7810 ppt
Integracja gospodarcza na świecie w oparciu o wybrane przykłady ugrupowań integracyjnych ppt
09 Ptasia Grypaid 8094 ppt
PrzyklTestyPrawCzlow, Aplikacja
Kinesiology taping teoria, metodyka, przykładowe aplikacje w konkretnych dysfunkcjach Tiffert M(1)
Wzor-09 Przyklad fragmentu mapy przegl. stanow pra 31 03 03, Wyrys z mapy przeglądowej stanów prawny
09 Strategie przedsiębiorstwid 7783 ppt
09 Stopień krystalicznościid 8006 ppt
0 2 Przykładowe projektyid 1789 ppt
09 Krwawienia 2id 7765 ppt
09 Przykładowe zalecenia do opieki nad dzieckiem z ADHD w szkole
Przedmiar robót - przykład, Pliki DOC PPT
(4079) druga pochodna przyklad 2id 1052 ppt
0 1 Proces technologiczny i produkcyjny przykład(1)id 1775 ppt

więcej podobnych podstron