Venäläisen raportoinnin muunnos Excelillä. sanasto: kartoitus

Korvattujen luokkien on ilmoitettava sarake pääavain tietokantataulukossa. Useimpien luokkien on myös ilmoitettava omat JavaBeans-tyyliset ominaisuutensa, mukaan lukien yksilöllinen kokonaisuuden tunniste. Elementti kartoitustiedostossa he määrittelevät tämän ainutlaatuisen kentän yhdistämisen taulukon sarakkeeseen, joka toimii ensisijaisena avaimena.

(5)

(1)

nimi (valinnainen): Tunnisteominaisuuden nimi.

(2)

type (valinnainen): Nimi, joka määrittää ominaisuuden Hibernate-tyypin.

(3)

sarake (valinnainen - oletusominaisuuden nimi): Ensisijaisen avaimen sarakkeen nimi.

(4)

unsaved-value (valinnainen – oletusarvo on null): Tunnisteen ominaisuuden arvo, joka osoittaa, että ilmentymä on uusi (pysyvästi säilytetyillä ehdoilla). Erottaa tämän ilmentymän siirtoesiintymistä, jotka on ladattu tai tallennettu edellisessä versiossa.

(5)

käyttöoikeus (valinnainen - oletusarvo on ominaisuus): Tämä on strategia, jota Hibernate käyttää pääsyyn tämä omaisuus esine.

Jos nimi attribuutti ei ole määritetty, oletetaan, että luokalla ei ole tunnisteominaisuutta.

Tallentamaton arvo -määrite on tärkeä! Jos luokkasi oletustunnus-ominaisuus ei ole null, sinun on asetettava "unsaved-value" -attribuutti oikeaan arvoon.

Vaihtoehtoinen ilmoitus on olemassa käyttääksesi vanhoja tietoja yhdistelmäavaimilla. Emme suosittele yhdistelmäavainten käyttöä muissa tapauksissa.

5.1.4.1. generaattori

Edellytetään lapsielementti "a päättää Java luokka käytetään yksilöllisten tunnisteiden luomiseen pysyvien luokkien esiintymille. Tarvittaessa elementtiä käytetään Alustus- tai konfigurointiparametrien välittäminen generaattoriinstanssille.

uid_table next_hi_value_column

Kaikki generaattorit toteuttavat net.sf.hibernate.id.IdentifierGenerator-liittymän. Se on hyvin yksinkertainen käyttöliittymä; monet sovellukset voivat käyttää omia mukautettuja generaattoritoteutuksia. Tästä huolimatta Hibernate sisältää monia sisäänrakennettuja generaattoreita. Alla on sisäänrakennettujen generaattoreiden lyhyet nimet (tarrat):

Lisäys

luo tunnisteita pitkä tyyppi, lyhyt tai int, ainutlaatuinen vain silloin, kun muut prosessit eivät lisää tietoja samaan taulukkoon. Älä käytä klusterissa.

identiteetti

Tukee identiteettisarakkeita DB2:ssa, MySQL:ssä ja MS:ssä SQL Server, Sybase ja HypersonicSQL. Paluutunnisteen tyyppi on pitkä, lyhyt tai int.

järjestys

Käyttää sekvenssiä DB2:ssa, PostgreSQL:ssä, Oraclessa, SAP DB:ssä, McKoissa tai generaattoria Interbasessa. Paluutunnisteen tyyppi on pitkä, lyhyt tai int.

hei

Käyttää hi/lo-algoritmia luodakseen tehokkaasti tunnisteita, jotka ovat tyyppiä long, short tai int ja jotka vaativat taulukon ja sarakkeen nimen (oletuksena hibernate_unique_key ja next_hi) hi-arvojen lähteenä. Hi/lo-algoritmi luo tunnisteita, jotka ovat ainutlaatuisia vain yksittäisille tietokannoille. Älä käytä tätä generaattoria JTA-yhteyksiin tai mukautettuihin yhteyksiin.

seqhilo

käyttää hi/lo-algoritmia luodakseen long-, short- tai int-tyyppisiä tunnisteita tietokantasekvenssin avulla.

uuid.hex

Käyttää 128-bittistä UUID-algoritmia luodakseen verkossa ainutlaatuisia merkkijonotunnisteita (IP-osoitetta käyttämällä). UUID on 32-merkkinen merkkijono, joka sisältää luvun heksadesimaalimuodon.

uuid.string

käyttää samaa UUID-algoritmia, mutta tätä generaattoria käytettäessä merkkijono koostuu 16 (joistakin) ANSII-merkistä. Älä käytä PostgreSQL:n kanssa.

syntyperäinen

valitsee identiteetin, sekvenssin tai hilon käytettävän tietokannan ominaisuuksien mukaan.

määrätty

tarjoaa sovellukselle mahdollisuuden asettaa itsenäisesti objektin tunniste ennen save()-menetelmän kutsumista.

ulkomaalainen

käytetään toisen, liittyvän objektin tunnistetta. Yleensä käytetään yhdessä yhdistäminen ensisijaisella avaimella.

5.1.4.2. Hi/Lo-algoritmi

Hilo- ja seqhilo-generaattorit tarjoavat kaksi vaihtoehtoisia toteutuksia hi/lo-algoritmi, suosituin tapa luoda tunnisteita. Ensimmäinen toteutus vaatii "erityisen" taulukon tietokannassa seuraavan "hi"-arvon tallentamiseksi. Toinen toteutus käyttää sekvenssiä (Oracle-tyyliä) niitä tukevissa tietokannoissa.

hi_value seuraava_arvo 100 hi_value 100

Valitettavasti et voi käyttää hiloa toimittaessasi yhteyttä lepotilaan, etkä myöskään kokoonpanossa, jossa Hiberante käyttää JTA-hallittua sovelluspalvelimen tietolähdettä. Hiberanten on voitava vastaanottaa "hi"-arvo uudessa tapahtumassa. EJB:n vakiolähestymistapa on käyttää istunnon tilatonta papua hi/lo-algoritmin toteuttamiseen.

5.1.4.3. UUID-algoritmi

Älä yritä käyttää uuid.string-tiedostoa PostgreSQL:ssä.

5.1.4.4. Jaksot ja identiteettisarakkeet

Voit käyttää identiteettiavaingeneraattoria tietokantoihin, jotka tukevat identiteettisarakkeita (DB2, MySQL, Sybase, MS SQL). Sekvenssejä tukevissa tietokannoissa voit käyttää sekvenssityyliä avainten luomiseen. Molemmat näistä strategioista vaativat kaksi SQL-kyselyt lisätäksesi uuden objektin tietokantaan.

uid_sequence

Käytä natiivistrategiaa kehittääksesi monialustaisia ​​sovelluksia. Se käyttää identiteetti-, sekvenssi- ja hilo-strategioita sen tietokannan ominaisuuksien mukaan, johon se on yhdistetty. Tämä hetki aika Lepotila on käynnissä.

5.1.4.5. Määritellyt tunnukset

Jos haluat, että sovellus määrittää itse tunnukset, voit käyttää määritettyä generaattoria. Tämä erityinen generaattori käyttää sovelluksen asettamia tunnuksia. Tätä varten sovellus asettaa tunnisteen objektin vastaavaan ominaisuuteen. Ole erittäin varovainen, kun käytät tätä ominaisuutta avainten asettamiseen (useimmissa tapauksissa tämä päätös on merkki huonosta sovellussuunnittelusta).

Sen luontaisen luonteen vuoksi tätä generaattoria käyttäviä entiteettejä ei voida tallentaa Session.saveOrUpdate()-menetelmällä. Sen sijaan sinun on nimenomaisesti kerrottava Hibernatelle, pitäisikö objekti luoda vai päivittää kutsumalla asianmukaisia ​​Session-objektimenetelmiä: save() tai update().

5.1.5. komposiitti-id

......

Taulukoissa, joissa on yhdistelmäavaimet, voit paljastaa useita luokkaominaisuuksia objektin tunnisteominaisuuksiksi. Elementti hyväksyy ominaisuuskartoitukset käyttämällä alielementtejä Ja .

Pysyvän luokkasi on ohitettava equals()- ja hashCode()-metodit yhdistetyn tunnisteen ekvivalenssin toteuttamiseksi. Sen on myös otettava käyttöön Serialisoitava käyttöliittymä.

Valitettavasti kyky määrittää yhdistettyjä tunnisteita tarkoittaa, että pysyvä objekti on tunniste. Ei ole mahdollisuutta kätevään käsittelyyn kuin itse kohteen kautta. Sinun on luotava itse pysyvä luokkakokonaisuus ja asetettava sen tunnistusominaisuus ennen kuin lataat() kyseiseen yhdistelmätunnisteeseen liittyvän pysyvän tilan. Sopivampaa tapaa, jossa yhdistetyt tunnisteet toteutetaan erillisenä luokkana, kuvataan kohdassa 7.4, "Komponentit yhdistelmätunnisteina". Alla kuvatut attribuutit koskevat vain vaihtoehtoista menetelmää:

    nimi (valinnainen): Komponenttityypin ominaisuus, joka sisältää yhdistelmätunnisteen (katso seuraava osa).

    luokka (valinnainen, oletusarvoisesti ominaisuuden tyyppi määritetään heijastuksen kautta): tämän luokan komponenttia käytetään yhdistelmätunnisteena (katso seuraava osa).

    unsaved-value (valinnainen, oletuksena ei mitään): Jos asetettu arvoon mikä tahansa, tämä tarkoittaa, että liikennekokonaisuuksia käsitellään uusina.

5.1.6. syrjijä

Elementti tarvitaan polymorfiseen pysyvyyteen käyttämällä taulukko-luokka-hierarkia-kartoitusstrategiaa. Tämä elementti ilmoittaa erottajasarakkeen, jota käytetään määrittämään, vastaako taulukkomerkintä tiettyä luokkaa hierarkiassa. Erotin voi olla jokin seuraavista: merkkijono, merkki, kokonaisluku, tavu, lyhyt, looginen, kyllä_ei, tosi_false.

Jokaisen luokan vastaavat Diskriminator-sarakkeen arvot määritetään elementtien discriminator-value -attribuutissa Ja .

Voima-attribuutti on hyödyllinen vain, jos taulukko sisältää tietueita, joissa on ylimääräisiä erotteluarvoja, jotka eivät näy pysyvässä luokassa. Yleensä tätä attribuuttia ei käytetä.

5.1.7. versio (valinnainen)

Elementti tarkoittaa, että taulukko sisältää versiokoodattuja tietueita. Tämä on erityisen hyödyllistä, jos aiot käyttää pitkiä liiketoimia(Katso alempaa).

(1)

sarake (valinnainen, oletuksena ominaisuuden nimi): sen sarakkeen nimi, joka tallentaa versionumerot.

(2)

name: Pysyvän luokan ominaisuuden nimi.

(3)

type (valinnainen, oletuksena kokonaisluku): version ominaisuuden tyyppi.

(4)
(5)

unsaved-value (valinnainen, oletuksena määrittelemätön): Version ominaisuuden arvo, joka ilmaisee, että entiteettiä ei ole vielä tallennettu (tallentamaton). Älä sekoita tallentamattomia entiteettejä siirtokokonaisuuksiin, jotka on tallennettu tai ladattu edellisessä istunnossa. (määrittämätön tarkoittaa, että tunnistearvoa käytetään.)

Versionumerot voivat olla tyyppiä pitkä, kokonaisluku, lyhyt, aikaleima tai kalenteri.

5.1.8. aikaleima (valinnainen)

Elementti ilmaisee, että taulukko sisältää aikaleimalla merkittyjä tietueita. Tämä elementti toimii vaihtoehtona versiomerkeille. Aikaleimat ovat määritelmän mukaan vähemmän turvallinen optimistisen lukituksen toteutus. Joskus sovellus kuitenkin käyttää aikaleimoja muihin tarkoituksiin

(1)

sarake (valinnainen, oletuksena ominaisuuden nimi): Aikaleiman sisältävän sarakkeen nimi.

(2)

nimi: Pysyvän luokan Date- tai Timestamp-ominaisuuden JavaBeans-tyylinen nimi.

(3)

käyttöoikeus (valinnainen, oletuksena omaisuus): Strategia, jota Lepotilan tulee käyttää saadakseen käsiksi omaisuuden arvon.

(4)

unsaved-value (valinnainen - oletusarvo on null): Aika-ominaisuuden arvo, joka osoittaa, että entiteettiä ei ole vielä tallennettu (tallentamaton). Älä sekoita tallentamattomia entiteettejä siirtokokonaisuuksiin, jotka on tallennettu tai ladattu edellisessä istunnossa. (määrittämätön tarkoittaa, että tunnistearvoa käytetään.)

Huomautus: elementti vastaa elementtiä .

5.1.9. omaisuutta

Elementti Ilmoittaa luokan pysyvän JavaBeans-tyylisen ominaisuuden.

(1)

nimi: Kiinteistön nimi, joka alkaa pienellä kirjaimella.

(2)

sarake (valinnainen, ominaisuuden nimi korvataan oletuksena): vastaavan sarakkeen nimi tietokantataulukossa.

(3)

tyyppi (valinnainen): Lepotilatyypin nimi.

(4)

update, insert (valinnainen, oletuksena tosi) : osoittaa, että vastaava sarake tulee sisällyttää SQL UPDATE- ja/tai INSERT-käskyihin. Molempien ominaisuuksien arvoksi asettaminen epätosi sallii ominaisuuden arvon asettamisen joko toisesta samassa sarakkeessa/sarakkeissa näkyvästä ominaisuudesta, liipaisimen kautta tai toisella sovelluksella.

(5)

kaava (valinnainen): SQL-lauseke, joka laskee ominaisuuden arvon. Laskettuja kenttiä ei pidä yhdistää tietokantataulukon sarakkeeseen.

(6)

käyttöoikeus (valinnainen, oletuksena omaisuus): Strategia, jota Lepotilan tulee käyttää saadakseen käsiksi omaisuuden arvon.

tyypin ominaisuuden arvo voi olla jokin seuraavista:

    Hibernate-perustyypin nimi (esimerkiksi kokonaisluku, merkkijono, merkki, päivämäärä, aikaleima, float, binääri, serialoitava, objekti, blob).

    Java-luokan nimi (esimerkiksi int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob).

    Luokan nimi, joka on johdettu sanasta PersistentEnum (esimerkiksi esim. Väri).

    Sarjatettavan Java-luokan nimi.

    Mukautetun luokan nimi (esimerkiksi com.illflow.type.MyCustomType).

Jos et määritä arvoa type-ominaisuudelle, Hibernate käyttää määritetyn ominaisuuden heijastusta arvatakseen sopivan lepotilatyypin. Hibernate yrittää määrittää get()-menetelmän palauttaman ominaisuuden luokan nimen käyttämällä sääntöjä 2, 3, 4 tässä järjestyksessä. Tämä ei kuitenkaan aina riitä. Joissakin tapauksissa sinun on silti määritettävä type-attribuutti. (Esimerkiksi erottaaksesi Hibernate.DATE ja Hibernate.TIMESTAMP tai määrittääksesi mukautetun tyypin.)

Access-attribuutin avulla voit hallita, kuinka Lepotila käyttää kenttää suorituksen aikana. Oletusarvoisesti Hibernate kutsuu get/set-menetelmiä päästäkseen kentälle. Jos määrität access="field", Hibernate ohittaa get/set-menetelmät ja käyttää kenttää suoraan heijastuksen avulla. Voit määrittää oman pääsystrategiasi määrittämällä luokan, joka toteuttaa net.sf.hibernate.property.PropertyAccessor-liittymän.

5.1.10. monta yhteen

Normaali suhde toiseen pysyvään luokkaan ilmoitetaan käyttämällä monta yhteen -elementtiä. Suhteellisesti se on monien yhteenliittymä. Se on oikeastaan ​​vain viittaus esineeseen.

(1)

nimi: Kiinteistön nimi.

(2)

sarake (valinnainen): sarakkeen nimi.

(3)

luokka (valinnainen - oletusarvoisesti kentän tyyppi määritetään heijastuksen avulla): Liitetyn luokan nimi.

(4)

kaskadi (valinnainen): Määrittää, mikä toiminto siirtyy pääobjektista siihen liittyvään objektiin.

(5)
(6)

päivitys, insert (valinnainen - oletuksena tosi) määrittää, että näytetyt sarakkeet sisällytetään SQL UPDATE- ja/tai INSERT-kyselyihin. Molempien ominaisuuksien arvoksi asettaminen epätosi sallii ominaisuuden arvon asettamisen joko toisesta samassa sarakkeessa/sarakkeissa näkyvästä ominaisuudesta, liipaisimen kautta tai toisella sovelluksella.

(7)

property-ref: (valinnainen) Liitetyn luokan avainominaisuuden nimi. Tätä ominaisuutta käytetään sitomiseen. Jos sitä ei ole määritetty, käytetään liittyvän luokan ensisijaista avainta.

(8)

käyttöoikeus (valinnainen - oletusarvo on ominaisuus): Strategia, jolla Hibernate käyttää tietyn kentän arvoa.

Cascade-attribuutilla voi olla seuraavat arvot: all, save-update, delete, none. Muun kuin ei mitään -arvon asettaminen edellyttää tiettyjä toimintoja liittyvälle (lapsi)objektille. Katso "Objektin elinkaari" alla.

Outer-join-attribuutilla voi olla seuraavat kolme arvoa:

    auto (oletus) noutaa liittyvät objektit käyttämällä ulkoista liitosta, jos liittyvällä luokalla ei ole välityspalvelinta.

    true Hae aina liittyvät objektit käyttämällä ulkoliitosta.

    false Älä koskaan nouta liitettyjä objekteja ulkoliitoksen avulla.

Tyypillinen useat yhteen -yhdistysilmoitus näyttää tältä

Attribuuttia property-ref käytetään vain linkittämiseen perittyjen tietojen kanssa, kun vierasavain viittaa siihen liittyvän taulukon ainutlaatuiseen arvoon, joka on muu kuin ensisijainen avaime. Tämä on vaarallinen suhteellinen päätös. On esimerkiksi mahdollista, että tuoteluokalla on yksilöllinen järjestysnumero, joka ei ole ensisijainen avain. (Ainutlaatuinen attribuutti ohjaa Hibernaten DDL-sukupolvea. Luonti tehdään SchemaExport-apuohjelmalla.)

OrderItem-kartoitus voi käyttää:

Itse asiassa tämän tekeminen on erittäin masentavaa.

5.1.11. Yksi yhteen

Yksi-yhteen-yhteys toiseen pysyvään luokkaan voidaan ilmoittaa käyttämällä yksi-yhteen-elementtiä.

(1)

nimi: Kiinteistön nimi.

(2)

luokka (valinnainen - oletusarvoisesti määritetty kentän tyypin perusteella): Liitetyn luokan nimi.

(3)

kaskadi (valinnainen) määrittää, mikä toiminto ketjutetaan pääobjektista siihen liittyvään objektiin.

(4)

rajoitettu (valinnainen) määrittää, että vieraa avain, joka viittaa siihen liittyvään luokkaan, on taulukon ensisijaisen avaimen rajoittama. Tämä asetus vaikuttaa järjestykseen, jossa save()- ja delete()-sarjaoperaatiot suoritetaan (ja sitä käyttää myös skeeman vientityökalu).

(5)

outer-join (valinnainen - oletuksena auto): Ottaa käyttöön liittyvien objektien noudon käyttämällä ulkoliitoksia, jos hibernate.use_outer_join-määritystiedostoasetus on käytössä.

(6)

property-ref: (valinnainen) Liitetyn luokan ominaisuuden nimi, joka sisältyy tämän luokan ensisijaiseen avaimeen. Jos sitä ei ole määritetty, käytetään liittyvän luokan ensisijaista avainta.

(7)

pääsy (valinnainen, oletuksena ominaisuus): Strategia, jota Lepotilan tulee käyttää tämän kentän käyttämiseen.

Yksi-yhteen-assosiaatioita on kahdenlaisia:

    ensisijainen avainsuhde

    suhde ainutlaatuisella vieraalla avaimella

Yhteyden järjestämiseen ensisijaisella avaimella ei tarvita lisäsarakkeita. Jos kaksi tietuetta liittyy tällaiseen assosiaatioon, se tarkoittaa, että kahden taulukon kahdella tietueella on sama perusavaimen arvo. Siksi, jos haluat yhdistää kaksi objektia niin, että ne liittyvät ensisijaiseen avaimeen, sinun on varmistettava, että niiden tunnukset on asetettu samaan arvoon!

Ensisijaisen avaimen yhdistämistä varten lisää seuraava kartoitus Työntekijä- ja Henkilö-luokille.

Nyt meidän on varmistettava, että taulukoiden vastaavien tietueiden ensisijaiset avaimet ovat identtisiä. Käytämme erityistä ulkomaista Hibernate-generaattoria:

työntekijä ...

Henkilö-luokan säilytetylle ilmentymälle on määritetty sama ensisijaisen avaimen arvo, joka on määritetty Henkilö-luokan työntekijäominaisuuden viittaaman Työntekijä-luokan ilmentymälle.

Vaihtoehtona työntekijän ja henkilön henkilökohtaisen suhteen kuvaamiselle yksilöllisen vieraan avaimen avulla voit käyttää seuraavaa merkintää:

Tästä yhteydestä voidaan tehdä kaksisuuntainen lisäämällä seuraava lauseke Person-luokan kartoitukseen:

5.1.12. komponentti, dynaaminen komponentti

Elementti kartoittaa sisäkkäisen objektin kentät pääluokan taulukon sarakkeisiin. Komponentit voivat puolestaan ​​määrittää omia ominaisuuksiaan, komponenttejaan tai kokoelmiaan. Katso "Komponentit" alla.

(5) ........

(1)

nimi: Ominaisuuden nimi (viittaen komponenttiobjektiin).

(2)

luokka (valinnainen - oletusarvoisesti komponenttityyppi määritetään heijastuksen avulla): Komponenttiluokan nimi.

(3)

insert: Jos arvo on tosi, komponentin näytettävät kentät osallistuvat SQL INSERT -kyselyihin.

(4)

päivitys: Jos arvo on tosi, komponentin näytettävät kentät osallistuvat SQL UPDATE -kyselyihin.

(5)

access (valinnainen - oletuksena ominaisuus): Strategia, jota Hibernate käyttää, kun tätä papua käytetään pääobjektin kautta.

Sisäkkäiset tunnisteet Yhdistä komponenttikentät taulukon sarakkeiksi.

Elementti sallii sisäkkäisen elementin Joka tekee komponentin ominaisuuden takaisinviittaukseksi pääobjektiin.

Elementti voit käyttää karttaa komponenttina, jossa kenttien nimet vastaavat kartan näppäimiä.

5.1.13. alaluokka

Lopuksi polymorfinen pysyvyys vaatii jokaisen perusluokan alaluokan ilmoittamisen. (suositeltavassa) näyttöstrategiassa taulukko-luokka-hierarkia käyttää elementtiä .

.....

Jokaisen alaluokan on ilmoitettava omat pysyvät kentänsä ja alaluokkansa. Kiinteistöjen periminen on sallittua Ja perusluokasta. Jokaisen hierarkian alaluokan on määriteltävä yksilöllinen erottaja-arvo. Jos tätä arvoa ei ole määritetty, koko luokan nimeä käytetään erottajana.

5.1.14. liittynyt-alaluokka

Vaihtoehtoisesti aliluokka, jonka objektit on tallennettu erilliseen taulukkoon (taulukko-alaluokka-kartoitusstrategia), ilmoitetaan käyttämällä elementtiä .

.....

Tämä näyttöstrategia ei vaadi erottajasarakkeen määrittämistä. Jokaisen alaluokan on kuitenkin ilmoitettava taulukon sarake, joka sisältää elementin näyttämän tunnisteen . Jakson alussa annettu kartoitus voidaan kirjoittaa uudelleen seuraavasti:

Pysyvä tila koostuu viittauksista muihin entiteeteihin ja arvotyyppien esiintymisiin. Arvot ovat primitiivisiä, kokoelmia, komponentteja ja muita muuttumattomia objekteja. Toisin kuin entiteetit, arvotyyppiset esiintymät (erityisesti kokoelmat ja komponentit) säilytetään ja poistetaan, kun ne ovat saatavilla. Koska arvotyyppiset objektit (ja primitiivit) tallennetaan ja poistetaan niiden sisältävän entiteetin kanssa, niillä ei voi olla itsenäistä versiointia. Arvoilla ei myöskään ole itsenäistä identiteettiä, joten niitä ei voida jakaa kahden kokonaisuuden tai kokoelman välillä.

Kaikki Hibernate-tyypit, kokoelmat lukuun ottamatta, tukevat nollaosoittimen semantiikkaa.

Tähän asti olemme käyttäneet termiä "pysyvä luokka" viittaamaan entiteeteihin. Teemme tätä jatkossakin. Tarkkaan ottaen kaikki käyttäjän määrittämät luokat, joilla on pysyvä tila, eivät ole entiteettejä. Esimerkiksi komponentti on käyttäjän määrittämä luokka, jolla on arvotyyppinen semantiikka (komponentit ovat osa niitä sisältäviä entiteettejä, ja niitä pidetään näiden entiteettien kenttinä).

5.2.2. Perusarvotyypit

Perustyypit voidaan karkeasti jakaa seuraavasti

kokonaisluku, pitkä, lyhyt, kelluva, tupla-, merkki, tavu, looginen, kyllä_ei, tosi_false

Primitiivisten Java-tyyppien tai kääreluokkien yhdistäminen vastaaviin (toimittajariippuvaisiin) taulukon sarakkeiden SQL-tyyppeihin. boolean, yes_no ja true_false ovat vaihtoehtoisia merkintöjä Java-tyypeille boolean tai java.lang.Boolean.

merkkijono

Java.lang.String-tyypin yhdistäminen muotoon VARCHAR (tai Oracle VARCHAR2).

päivämäärä, aika, aikaleima

Java.util.Date-tyypin ja sen alaluokkien yhdistäminen SQL-tyyppeihin DATE, TIME ja TIMESTAMP (tai vastaaviin).

kalenteri, kalenteri_päivämäärä

Java.util.Calendar-tyypin yhdistäminen SQL-tyyppeihin TIMESTAMP ja DATE (tai vastaaviin).

iso_desimaali

Yhdistystyyppi java.math.BigDecimal numeroon NUMERIC (tai Oracle NUMBER).

alue, aikavyöhyke, valuutta

Java.util.Locale-, java.util.TimeZone- ja java.util.Currency-tyyppien yhdistäminen VARCHARiin (tai Oracle VARCHAR2:een). Kieli- ja Valuutta-instanssit on yhdistetty ISO-koodeihinsa. Aikavyöhyke-esiintymät yhdistetään niiden tunnisteisiin (ID).

luokkaa

Yhdistystyyppi java.lang.Class VARCHARiin (tai Oracle VARCHAR2:een). Luokka näytetään sen koko nimenä.

binääri

Yhdistää tavutaulukot vastaavaan binaariseen SQL-tyyppiin.

teksti

Näyttää pitkät Java-merkkijonot SQL CLOBissa tai TEXT:ssä.

sarjoitettavissa

Yhdistää sarjoitettavat Java-tyypit vastaaviin binäärisiin SQL-tyyppeihin. Voit myös merkitä Hibernate-serialoitavan tyypin sarjoitettavan Java-luokan tai käyttöliittymän nimeksi, joka ei ole perustyyppi eikä käytä PersistentEnum-liitäntää.

möykky, möykky

Java.sql.Clob- ja java.sql.Blob-luokkien JDBC-tyyppinen kartoitus. Nämä tyypit voivat olla hankalia joissakin sovelluksissa, koska blob- ja clob-objekteja ei voida käyttää tapahtumien ulkopuolella. (Lisäksi ohjaimet eivät tue näitä tyyppejä täysin ja yhtenäisesti.)

Kokoelmien ja kokoelmien yksilölliset tunnisteet voivat olla mitä tahansa perustyyppiä paitsi binääri-, blob- ja clob-tunnisteita. (Myös yhdistelmätunnisteet ovat sallittuja, katso alla.)

Perusarvotyypit kuvataan vakioissa, jotka on ilmoitettu net.sf.hibernate.Hibernate. Esimerkiksi Hibernate.STRING edustaa merkkijonotyyppiä.

5.2.3. Pysyvät enum-tyypit

Luettelotyyppi on Java-perusidiomi, kun luokassa on vakio (pieni) määrä muuttumattomia esiintymiä (Kääntäjän huomautus Java 5:ssä tämä otettiin käyttöön kielitasolla, aiemmissa versioissa käytettiin erityistä mallia tähän). Voit luoda pysyviä enum-tyyppejä ottamalla käyttöön net.sf.hibernate.PersistentEnum-rajapinnan ja määrittämällä toInt()- ja fromInt()-toiminnot:

Paketti esim. tuonti net.sf.hibernate.PersistentEnum; julkinen luokka Väri toteuttaa PersistentEnum ( yksityinen lopullinen int koodi; yksityinen väri(int koodi) ( this.code = koodi; ) julkinen staattinen lopullinen Väri TABBY = uusi väri(0); julkinen staattinen lopullinen Väri GINGER = uusi väri(1); julkinen staattinen lopullinen Väri MUSTA = new Color(2) julkinen int toInt() ( paluukoodi; ) julkinen staattinen Color fromInt(int code) ( kytkin (koodi) ( tapaus 0: paluu TABBY; tapaus 1: paluu GINGER; tapaus 2:) return MUSTA oletus:heitto uusi RuntimeException("Tuntematon värikoodi");

Hibernate-tyypin nimi on yksinkertaisesti luetteloidun luokan nimi, tässä tapauksessa esim. Color.

5.2.4. Mukautetut arvotyypit

Kehittäjien on suhteellisen helppoa luoda omia arvotyyppejä. Saatat esimerkiksi haluta tallentaa java.lang.BigInteger-tyypin ominaisuuksia VARCHAR-tyypin sarakkeisiin. Hibernate ei tarjoa sisäänrakennettua tyyppiä tätä varten. Mutta mukautettujen tyyppien määrittäminen ei rajoitu ominaisuuksien (tai kokoelmaelementtien) yhdistämiseen yhteen taulukon sarakkeeseen. Joten sinulla voi olla esimerkiksi ominaisuus getName()/setName(), jonka tyyppi on java.lang.String, joka on tallennettu sarakkeisiin FIRST_NAME, INITIAL, SURNAME.

Ota mukautettu tyyppi käyttöön ottamalla käyttöön jokin net.sf.hibernate.UserType- tai net.sf.hibernate.CompositeUserType-liitännöistä ja ilmoittamalla ominaisuus käyttämällä tyyppitoteutuksen täydellistä luokan nimeä. Tarkista käytettävissä olevat ominaisuudet osoitteesta net.sf.hibernate.test.DoubleStringType.

Huomautus: käytä tunnisteita näyttää ominaisuudet useissa sarakkeissa.

Vaikka Hibernaten runsas sisäänrakennettujen tyyppien ja komponenttien tuki tarkoittaa, että sinun on harvoin käytettävä mukautettuja tyyppejä, on silti hyvä käytäntö käyttää niitä (ei-kokonaisuuksina) tyypeinä, joita käytetään usein sovelluksessasi. Esimerkiksi MonetoryAmount-luokka on hyvä ehdokas CompositeUserTypelle, vaikka se voidaan paljastaa komponenttina. Päämotivaatio on abstraktio. Mukautettujen tyyppien avulla kartoitusasiakirjasi on kestävämpi mahdollisia muutoksia vastaan ​​tulevaisuudessa, jos muutat valuuttatyypin esitystapaa.

5.2.5. Minkä tahansa tyyppinen näyttö

On olemassa toinen tyyppi ominaisuuksien näyttämiseen. Näyttöelementti ilmoittaa polymorfisen assosioinnin luokille useista taulukoista. Tämäntyyppinen näyttö vaatii aina useamman kuin yhden sarakkeen. Ensimmäinen sarake sisältää liittyvän entiteetin tyypin. Loput sarakkeet sisältävät tunnisteen. Tietylle assosiaatiotyypille ei ole mahdollista määrittää vierasavainta, joten tätä kartoitusta ei tyypillisesti käytetä polymorfisiin assosiaatioihin. Sinun tulisi käyttää tätä kartoitusta vain erikoistapauksissa (esimerkiksi erityyppisten tietojen tallentamiseen, käyttäjän istuntotietojen käyttämiseen).

Meta-tyyppi-attribuutin avulla sovellus voi määrittää mukautetun tyypin, joka yhdistää tietokannan sarakearvot pysyviin luokkiin, joiden tunnisteominaisuudet ovat id-tyypin määrittämää tyyppiä. Jos meta-tyyppi palauttaa java.lang.Class-entiteetit, mitään muuta ei tarvita. Muissa tapauksissa, kun kyseessä on perustyyppi, kuten merkkijono tai merkki, arvot on kartoitettava luokkiin.

..... .....

(1)

nimi: Kiinteistön nimi.

(2)

id-type: Tunnisteen tyyppi.

(3)

meta-tyyppi (valinnainen - oletusarvoisesti luokka): tyyppi, joka yhdistää java.lang.Classin yhdeksi tietokantasarakkeeksi, tai vaihtoehtoisesti tyyppi, joka saa kartoittaa erottimen.

(4)

kaskadi (valinnainen - oletuksena ei mitään): Kaskaditoiminnon tyyppi.

(5)

käyttöoikeus (valinnainen - oletusarvo on omaisuus): Strategia, jota Hibernate käyttää saadakseen käsiksi omaisuuden arvon.

Vanha objektiominaisuus, jolla on oma paikkansa Hibernate 1.2:ssa, on edelleen tuettu, mutta se on vanhentunut.

5.3. SQL-tunnisteet lainausmerkeissä

Voit pakottaa Hibernaten lainaamaan tunnisteita SQL-käskyissä. Hibernate noudattaa lainaussääntöjä määritetyn SQL-murteen mukaisesti (yleensä lainausmerkit, mutta sulkumerkit SQL Serverille ja takalainausmerkit MySQL:lle).

...

5.4. Yksittäiset näyttötiedostot

Voit ilmoittaa alaluokka- ja liitetyn alaluokan vastaavuuksia erillisissä asiakirjoissa, aivan lepotila-kuvauselementin sisällä. Tämän ansiosta luokkahierarkiaa voidaan laajentaa lisäämällä uusi kartoitustiedosto. Tällä lähestymistavalla sinun on määritettävä extens-attribuutti aliluokkakuvauksessa, joka sisältää esikartoidun superluokan nimen. Tämän ominaisuuden käyttäminen tekee kartoitusasiakirjojen luettelointijärjestyksen tärkeäksi.

Ongelma

Olet ladannut kustannuslaskentaraportin ja haluat näyttää sen johdolle. Tätä varten sinun on koottava tiedot kirjanpito-eristä - johdon kirjanpidon erien mukaan. Tiedät kuinka kirjanpito ja kirjanpitoartikkelit liittyvät toisiinsa, mutta joka kerta tällaisen raportin laatiminen manuaalisesti vie sinulta liian paljon aikaa.

Ratkaisu

Käsittelemme tätä tapausta jatkona edelliselle. Oletetaan, että loit seuraavan hakemiston Excelissä:

Kuva 2.1. Hakemisto: BU- ja CU-artikkelien kartoitus


Vasemmalla on kustannuserä (AC), oikealla on johdon kirjanpidon erä (MA). On tärkeää, että kustannuserä näkyy vain kerran ensimmäisessä sarakkeessa, muuten kartoitusmekanismi ei toimi oikein.

(Muuten, englanninkielinen sana mapping on käännetty näyttöksi tai kirjeenvaihdoksi, joten hakuteos on tässä tapauksessa eräänlainen yleissääntö sille, kuinka BU-artikkelit löytävät kartoituksensa CU-artikkeleiksi).

Kuva 2.2. Tasainen pöytä: kustannusraportti (kohdasta "Tilin liikevaihto 20")


Huomaa, että 7. sarakkeessa on sarake "Artikla TC". Jokaisen kustannuserän viereen olemme sijoittaneet johdon kirjanpidon erän. Tämä voidaan tehdä manuaalisesti, mutta on paljon kätevämpää käyttää tätä työkalua:

Kuva 2.3. Tasainen taulukko: kustannusraportti (kohdasta "Tilin liikevaihto 20")


Lomakkeen alareunassa on sivujen nimet: "Home" on litteä taulukko, joka sisältää kustannustiedot (kuva 2.2), "spr" on hakuteos (kuva 2.1).

Sarakkeiden numerot on ilmoitettu lomakkeen yläosassa. Joten tässä tapauksessa, jos hakemiston sarakkeiden 1 ja pääsivun 3 tiedot ovat samat, hakemiston 2. sarakkeen tiedot kopioidaan pääsivun 7. sarakkeeseen.

Tällä lomakkeella on myös monia lisävaihtoehtoja. Voit esimerkiksi ottaa käyttöön valintaruudut "Attribuutti #2" ja "Attribuutti #3", jolloin tietojen siirtäminen hakemiston sarakkeesta 2 pääsivun sarakkeeseen 7 on mahdollista, jos hakemisto ja pääsivu vastaavat kahta tai jopa kolme yksityiskohtaa kerralla.

Tällaisen yksinkertaisen toimenpiteen tuloksena pivot-taulukon avulla voit rakentaa useita erilaisia ​​analyyttisiä raportteja, joissa yksi osioista sisältää analytiikan "Artikkeli OU". Esimerkiksi näin:

Kuva 2.4. Vahvistusliikkeen kustannusraportti


Kartoituksen vertailu VLOOKUP()

Monet käyttäjät tuntevat VLOOKUP()-funktion ja käyttävät sitä tällaisissa tilanteissa. VLOOKUP()-funktio toimii kuitenkin hyvin vain pienille tietomäärille, kun taas tämä lomake käsittelee Excel-taulukoita erinomaisesti, vaikka viitekirjassasi olisi esimerkiksi 5000 riviä ja pääsivullasi 300 000 riviä. Yritä tarkistaa se ja näet, että VLOOKUP() epäonnistuu tällaisilla volyymeilla. Lisäksi VLOOKUP()-funktio kuormittaa Exceliä merkittävästi ja pakottaa sen suorittamaan suuria määriä laskutoimituksia. Kartoituslomakkeella voit välttää tämän haitan: se suoritetaan kerran, kestää muutaman sekunnin (suurilla minuuttimäärillä) ja sen jälkeen Excel-tiedostoon ei luoda lisäkuormitusta.

Porttikartoitus- tämä on vastaanotetun tiedon uudelleenohjausta siten, että yhden tietokoneen johonkin porttiin vastaanotettu data ohjataan automaattisesti toisen tietokoneen johonkin toiseen porttiin.

Itse asiassa tämä on paljon helpompi toteuttaa teknisesti kuin selittää itse periaatetta. Tätä voidaan verrata auringonsäteeseen: jos suuntaat valonsäteen peiliin, se heijastuu "automaattisesti" ja valaisee kohteen. Lisäksi, jos valaistat henkilöä ja tämä henkilö ei tiedä, että säde heijastui peilistä, hän ajattelee, että valo tulee paikasta, jossa peili sijaitsee. Se on sama täällä: kaikki lähettämäsi tiedot siirretään ilman vääristymiä toiseen tietokoneeseen, joka voi sijaita missä tahansa.

Tämä tekniikka on jossain määrin samanlainen kuin välityspalvelin, mutta se on paljon yksinkertaisempi ja paljon vähemmän joustava.

Kaava on suunnilleen sama kuin käytettäessä välityspalvelinta (voit sanoa, että porttikartoitus on samanlainen kuin välityspalvelin - mutta tämä on sama kuin sanoisi "isoisä on kuin pojanpoika" - itse asiassa välityspalvelin on samanlainen kuin porttikartoitus ):

Tietokoneesi >>> tietokone, jossa on porttikartoitus >>> etäpalvelin.

Miksi tarvitset porttikartoituksen?

  1. Jos organisaatiosi käyttää yrityksen välityspalvelinta, määrittämällä siihen porttikartoituksen ulkoiseen sähköpostipalvelimeen (mail.ru), voit käyttää minkä tahansa sähköpostiohjelma yritysverkosta - eikä sinun tarvitse asentaa/konfiguroida muita ohjelmia!
  2. Täsmälleen samalla tavalla kuin sähköpostiohjelma, voit määrittää melkein minkä tahansa muun ohjelman! Jos vain se tukee TCP/IP:tä.

Tietenkin nämä ovat vain tärkeimpiä tapoja käyttää porttikartoitusta. On monia muita aktiviteetteja, joissa se on myös erittäin, erittäin hyödyllistä.

Porttikartoituksen edut

  1. Tämä järjestelmä on hyvin yksinkertainen, ja Internetissä on monia ohjelmia, joiden avulla voit toteuttaa tämän toiminnon;
  2. Koska tiedot välitetään 100 % ilman vääristymiä, sinulle taataan 100 % anonyymiys.
  3. Jos käytät tätä järjestelmää, et tarvitse "soksifiaattoreita" - koska ylimääräistä yhteyden alustusta ei tarvita, porttikartoittimeen yhdistäminen vastaa etätietokoneeseen kytkeytymistä.

Porttikartoituksen haitat

  1. Tämä järjestelmä ei ole joustava. Toisin kuin välityspalvelin, jossa voit muodostaa yhteyden useisiin sivustoihin yhden välityspalvelimen kautta, voit muodostaa yhteyden yhden porttikartoituksen kautta vain yhdelle palvelin.
  2. Jokaista uutta porttikartoitusta varten sinun on muutettava sen palvelimen asetuksia, jossa tämä toiminto on toteutettu - tämä ei ole käytettävissä asiakastietokoneelta.
  3. Internetissä Ei ilmaiset porttikartoittajat (niiden äärimmäisistä rajoituksista johtuen - yksi porttikartoitus antaa pääsyn vain yhdelle palvelimelle), joten jos haluat olla todella nimetön tietokoneellasi, sinulla on oltava jossain palvelin, johon porttikartoitusohjelma asennetaan - ja nyt tämän palvelimen osoite "loistaa" verkkosivuston lokeissa.

Kuinka työskennellä porttikartoituksen kanssa

Huomaa, että porttikartoituksen kanssa työskentelytapa on suunnilleen sama kuin välityspalvelimen kanssa, vain vielä yksinkertaisempi. Porttikartoitus on alias (lisänimi) tietokoneelle, jossa se on määritetty.

Oletetaan, että porttikartoitus on tehty:

192.168.1.255:1234 => www.mail.ru:80 (portti 80 on verkkopalvelimen portti)

Sitten voit avata mail.ru-sivuston käyttämällä kahta tapaa - avaa verkkosivusto selainikkunassa:

  1. http://www.mail.ru
  2. http://192.168.1.255:1234/
    (tässä tapauksessa muista kirjoittaa http://)

Haluaisin huomauttaa: jos sinä tarvitsee käytä porttikartoitusta, sitten sinä pitäisi käyttää vain toista osoitetta. Eli jos et voi muodostaa yhteyttä mail.ru-sivustoon, sinun tulee käyttää vain sisäistä osoitetta (http://192.168.1.255:1234/).

Porttikartoitus paikallisella tietokoneella

Jos teet porttikartoitusta omalla tietokoneellasi, ilmoitat yleensä:

  1. paikallinen portti - tietokoneesi paikallinen portti, johon sinun on muodostettava yhteys käyttääksesi porttikartoitusta. Tämä luku voi olla mikä tahansa (1 - 65535), mieluiten yli 1000;
  2. etäisäntä - se tietokone (isäntä), jonka päällä määrittää porttikartoituksen. Tämä voi olla esimerkiksi postipalvelin pop.mail.ru;
  3. etäportti - tietokoneen portti, johon Yhteys tapahtuu porttikartoituksen kautta. Sähköpostin vastaanottamiseen (POP3) tämä on yleensä portti 110, postin lähettämiseen (SMTP) - portti 25, web-palvelimille (www...) - tämä on yleensä portti 80.

Joten tässä tapauksessa sinun on muodostettava yhteys (asettamalla porttikartoitus). Ei osoitteeseen mail.ru (ja vastaavaan) ja määritä oma tietokoneesi palvelimeksi:

127.0.0.1:localport

jossa localport on portin numero, joka on määritetty porttikartoituksen määrityksessä. Tämä voi olla esimerkiksi portti 1234.

Eli jos teit porttikartoituksen verkkosivustolla, sinun on kirjoitettava: http://127.0.0.1:1234/

Jos määrität postia, määritä se sähköpostipalvelimeksi 127.0.0.1 - sekä postin vastaanottamiseen että lähettämiseen. Älä myöskään unohda etsiä sähköpostiohjelmastasi porttinumeroasetuksia (POP3 ja SMTP) ja muuttaa niitä porttikartoituksen asetustesi mukaisesti!


Osa 3: Tietojen näyttäminen taulukosta (LIST-toiminto)

Edellisessä osassa tarkastelimme suhdetyyppejä (yksi yhteen, yksi moneen, monta moneen) sekä yhtä luokkaa Book ja sen kartoitusluokkaa BookMap. Toisessa osassa päivitetään Kirja-luokka, luodaan loput luokat ja yhteydet niiden välille, kuten edellisessä luvussa kuvattiin Tietokantakaaviossa, joka sijaitsee alaotsikon 1.3.1 Suhteet yläpuolella.

Luokkien koodit ja kartoitukset (Kommentein)

Luokan kirja

Public class Book ( //Ainutlaatuinen tunniste public virtual int Id ( get; set; ) // Otsikko julkinen virtuaalinen merkkijono Nimi ( get; set; ) // Kuvaus public virtual string Kuvaus ( get; set; ) // Rating of the World of Fiction public virtual int MfRaiting ( get; set; ) //Sivunumerot public virtual int PageNumber ( get; set; ) //Linkki kuvaan julkinen virtuaalinen merkkijono Kuva (get; set; ) //Kirjan saapumispäivämäärä (suodatin uusien kohteiden mukaan!) julkinen virtuaalinen DateTime IncomeDate ( get; set; ) //Tyylilaji (Monesta moneen) //Miksi ISet eikä IList Vain yksi kokoelma (IList) voidaan valita käyttämällä JOIN-hakua, jos useampi kuin yksi kokoelmaa tarvitaan JOIN-hakua varten, niin on parempi muuntaa ne ISetin julkiseksi virtuaaliseksi ISet-kokoelmaksi Genret ( get; set; ) //Sarja (Monet yhteen) julkinen virtuaalisarja Sarja ( get; set; ) //Mielipide ja muut (One-to-one) yksityinen Mind _mind; public virtual Mind Mind ( get ( return _mind ?? (_mind = new Mind()); ) set ( _mind = arvo; ) ) //Kirjoittaja (Monesta moneen) julkinen virtuaalinen ISet Tekijät ( get; set; ) //Alusta etukäteen, jotta tyhjää poikkeusta ei tapahdu. public Book() ( //Järjestämätön joukko (yhdessä taulukossa ei voi olla kahta täysin identtistä riviä, muuten se valitsee toisen ja jättää toisen huomioimatta) Genres = new HashSet (); Tekijät = uusi HashSet (); ) ) //Kartoitusluokka Kirjan julkinen luokka BookMap: ClassMap ( julkinen BookMap() ( Id(x => x.Id); Kartta(x => x.Name); Kartta(x => x.Description); Kartta(x => x.MfRaiting); Kartta(x = > x.SivuNumber); objekti tallennetaan, päivitetään tai poistetaan, kaikki riippuvat objektit tarkistetaan ja //luodu/päivitetään/lisätty.Cascade.SaveUpdate() //Välitaulukon nimen TÄYTYY olla sama kuin luokan Genre .Table("Kirjan_Tyyli" ); > x.Authors) .Cascade.SaveUpdate() .Table("Book_Author" //Mone-to-one-suhde Viittaukset(x => x.Series) //One-to-one-suhde HasOne(x). . => x.Mind).Cascade.All().Constrained();

Julkinen luokka Tekijä ( public virtual int Id ( get; set; ) //Nimi-Sukunimi public virtual string Nimi ( get; set; ) //Biografia julkinen virtuaalinen merkkijono Biografia ( get; set; ) //Kirjat julkinen virtuaalinen ISet Kirjat ( get; set; ) //Tekijöiden alustaminen public Author() ( Kirjat=new HashSet (); ) ) // Tekijä Mapping public class TekijäMap: ClassMap ( julkinen Tekijäkartta() ( Id(x => x.Id); Kartta(x => x.Name); Map(x => x.Biography); //Monesta moneen -suhde HasManyToMany(x => x .Books) //Kaskadisäännöt Kaikki - Kun objekti tallennetaan, päivitetään tai poistetaan, kaikki riippuvat objektit tarkistetaan ja luodaan/päivitetään/lisätään.Cascade.All() //Kokoelman omistaja on suhteen toinen pää (Kirja) ja se tallennetaan ensin .Inverse() //Välitaulukon nimen PITÄÄ olla sama kuin Book-luokan.

Luokka Genre

Public class Genre ( public virtual int Id ( get; set; ) //Genren nimi public virtual string Nimi (get; set; ) //Genren englanninkielinen nimi public virtual string EngName (get; set; ) //Kirjat julkinen virtuaalinen ISet Kirjat ( get; set; ) //Alusta kirjat julkinen Genre() ( Kirjat=new HashSet (); ) ) //Genrekartoitus julkinen luokka GenreMap: ClassMap ( public GenreMap() ( Id(x => x.Id); Map(x => x.Name); Map(x => x.EngName); //Monesta moneen -suhde HasManyToMany(x => x .Books) //Kaskadisäännöt Kaikki - Kun objekti tallennetaan, päivitetään tai poistetaan, kaikki riippuvat objektit tarkistetaan ja luodaan/päivitetään/lisätään.Cascade.All() //Kokoelman omistaja on suhteen toinen pää (Kirja) ja se tallennetaan ensin .Inverse() //Välitaulukon nimen PITÄÄ olla sama kuin Book-luokan.

Luokan mielipide:

Julkinen luokka Mind ( public virtual int Id ( get; set; ) //Minun mielipiteeni julkinen virtuaalinen merkkijono MyMind ( get; set; ) //Fantlabin mielipide julkinen virtuaalinen merkkijono MindFantLab ( get; set; ) //Kirja julkinen virtuaalinen kirjakirja ( get; ) ) //Mapping public class MindMap:ClassMap ( julkinen MindMap() ( Id(x => x.Id); Map(x => x.MyMind); Map(x => x.MindFantLab); //One-to-one-suhde HasOne(x => x .Kirja ) )

Luokkasykli (sarja):

Julkinen luokkasarja ( public virtual int Id ( get; set; ) public virtual string Name ( get; set; ) //Loin IListin, en ISetin, koska sarja ei liity mihinkään muuhun kuin Kirjaan, vaikka sinä voi tehdä ja ISet julkisen virtuaalisen IListin Kirjat ( get; set; ) //Alustetaan kirjoja. public Series() ( Kirjat = uusi lista (); ) ) julkinen luokka SeriesMap: ClassMap ( public SeriesMap() ( Id(x => x.Id); Map(x => x.Name); //Yksi-moneen-suhde HasMany(x => x.Books) ////Kirjan omistaja kokoelman toinen pää (Kirja) ja se tallennetaan ensin.

Pientä selitystä
julkinen virtuaalinen ISet Genret (get;set;)
julkinen virtuaalinen ISet Tekijät ( saada; asettaa; )

Miksi ISet , eikä esimerkiksi monille tuttu IList ? Jos käytämme IListiä ISetin sijaan ja yritämme ajaa projektia, emme huomaa suurta eroa (taulukoita ja luokkia luodaan). Mutta kun lisäämme Genre- ja Authors-taulukot samaan aikaan Book LeftJoin -luokkaan ja yritämme myös näyttää ei-toistuvia tietueita Book-taulukosta (Distinct Book.Id) näkymään (View), Nhibernate heittää poikkeus ja virhe.
Useita laukkuja ei voi noutaa samanaikaisesti.
Tällaisissa tapauksissa käytämme ISetiä, varsinkin kun joukot on tarkoitettu tähän (ne ohittavat päällekkäiset tietueet).

Monelta moneen -suhde.

NHibernatella on "pää"taulukon käsite. Vaikka monista moneen -suhde Kirja- ja Tekijä-taulukoiden välillä on vastaava (tekijällä voi olla useita kirjoja, kirjalla voi olla useita kirjoittajia), Nhibernate vaatii ohjelmoijalta määrittämään taulukon, joka tallennetaan toiseksi (sillä on menetelmä. käänteinen ()), eli ensin luodaan/päivitetään/poistetaan tietue Kirja-taulukkoon ja vasta sitten Tekijä-taulukkoon.
Cascade.All tarkoittaa peräkkäisten toimintojen suorittamista tallennuksen päivityksen ja poistamisen yhteydessä. Eli kun objekti tallennetaan, päivitetään tai poistetaan, kaikki riippuvat objektit tarkistetaan ja luodaan/päivitetään/lisätään (Ps. Voidaan kirjoittaa Cascade.All -> .Cascade.SaveUpdate().Cascade.Delete() sijaan)
Method.Table("Kirjan_tekijä"); luo tietokantaan "välitason" taulukon "Book_Author".

Monien välinen suhde, yksi moneen.

Metodi.Constrained() kertoo NHibernatelle, että Book-taulukon tietueen on vastattava Mind-taulukon tietuetta (Mind-taulukon id:n on oltava sama kuin Book-taulukon id).

Jos nyt suoritat projektin ja katsot Bibilioteca-tietokantaa, näkyviin tulee uusia taulukoita jo muodostetuilla yhteyksillä.

Seuraavaksi täytetään luodut taulukot tiedoilla...
Tätä varten luomme testisovelluksen, joka tallentaa tiedot tietokantaan, päivittää ja poistaa ne muuttaen HomeControlleria seuraavasti (kommentoimme koodin tarpeettomia osia):
public ActionResult Index() ( using (ISession session = NHibernateHelper.OpenSession()) ( using (ITransaction event = session.BeginTransaction())) ( //Luo, lisää var createBook = new Book(); createBook.Name = "Metro2033" LuoKirja.Description = "Post-apokalyptinen mystiikka"; luoKirja.Lisää (Nimi = "Glukhovsky" ( Nimi = "Metro" ); createBook.Mind = uusi mieli ( MyMind = "Post-apokalyptinen mystiikka" ). (1); //var updateBook = session.Get (1); //updateBook.Name = "Metro2034"; //updateBook.Description = "Dystopia"; //updateBook.Authors.ElementAt(0).Name = "Glukhovsky"; //updateBook.Genres.ElementAt(0).Name = "Dystopia"; //updateBook.Series = sarja; //updateBook.Mind.MyMind = "11111"; //session.SaveOrUpdate(päivityskirja); //Poista (tunnuksen mukaan) //var deleteBook = session.Get (1); //session.Delete(deleteBook); tapahtuma.Sitou(); ) Genre genreAl = null; Tekijä authorAl = null; SarjasarjaAl = null; Mind mindAl = null; var books = session.QueryOver () //Left Liity taulukon kanssa Genres .JoinAlias(p => p.Genres, () => .JoinAlias(p => p.Authors, () => authorAl, JoinType.LeftOuterJoin) .JoinAlias(p => p .Series, () => seriesAl, JoinType.LeftOuterLiit (); paluu Näytä (kirjat);

Pientä selitystä

  1. var books = session.QueryOver () Valitse * Kirjasta;
  2. .JoinAlias(p => p.Genres, () => genreAl, JoinType.LeftOuterJoin)- samanlainen kuin SQL-skriptin suorittaminen:
    VALITSE *KIRJASTA
    inner JOIN Book_Genre ON book.id = Kirja_laji.Kirjan_tunnus
    LEFT JOIN Genre PÄÄLLÄ Book_Genre.Genre_id = Genre.id
  3. .TransformUsing(Transformers.DistinctRootEntity)- Samanlainen kuin SQL-komentosarjan suorittaminen: VALITSE erillinen Book.Id..., (poistaa päällekkäiset tietueet, joilla on sama tunnus)

Yhdistysten tyypit
.JoinAlias(p => p.Genres, () => genreAl, JoinType.LeftOuterJoin)

  1. LeftOuterJoin - valitsee kaikki tietueet vasemmasta taulukosta ( Kirja) ja liittää niihin sitten oikeat taulukkotietueet ( Genre). Jos vastaavaa merkintää ei löydy oikeasta taulukosta, se näyttää sen tyhjänä
  2. RightOuterJoin on LEFT JOINin vastakohta - se valitsee kaikki tietueet oikeasta taulukosta ( Genre), ja liittää niihin sitten vasemmanpuoleiset taulukkotietueet ( Kirja)
  3. InnerJoin - valitsee vain ne tietueet vasemmasta taulukosta ( Kirja), jossa on vastaava merkintä oikeasta taulukosta ( Genre), ja yhdistää ne sitten oikean taulukon tietueisiin

Muutetaan esitys seuraavasti:

Hakemistonäkymä

@malli IEnumerable @( Asettelu = tyhjä; ) Indeksi

@Html.ActionLink("Luo uusi", "Luo")

@foreach (var-kohde mallissa) ( @(string strSeries = item.Series != null ? item.Series.Name: null;) }
@Html.DisplayNameFor(malli => malli.Nimi) @Html.DisplayNameFor(malli => malli.Mieli) @Html.DisplayNameFor(malli => malli.Series) @Html.DisplayNameFor(malli => malli.Authors) @Html.DisplayNameFor(malli => malli.Genres) Toiminnot
@Html.DisplayFor(modelItem => item.Name) @Html.DisplayFor(modelItem => item.Mind.MyMind)@Html.DisplayFor(modelItem => strSeries) @foreach (var author in item.Authors) ( string strAuthor = author != null ? author.Name: null; @Html.DisplayFor(modelItem => strAuthor)
}
@foreach (var genre in item.Genres) ( string strGenre = genre!= null ? genre.Name: null; @Html.DisplayFor(modelItem => strGenre)
}
@Html.ActionLink("Muokkaa", "Muokkaa", new ( id = item.Id )) | @Html.ActionLink("Tiedot", "Tiedot", new ( id = item.Id )) | @Html.ActionLink("Poista", "Poista", uusi ( id = item.Id ))


Kun olet tarkistanut kaikki toiminnot yksitellen, huomaamme, että:
  • Luo- ja päivitystoimintojen aikana kaikki Kirja-taulukkoon liittyvät tiedot päivitetään (poista Cascade="save-update" tai cascade="all" ja niihin liittyviä tietoja ei tallenneta)
  • Poistettaessa tiedot poistetaan Book, Mind, Book_Author-taulukoista, mutta loput tiedot eivät poistu, koska niissä on Cascade="save-update"

Kartoitus luokille, joilla on perintöä.
Kuinka kartoittaa luokat, joilla on perintöä? Oletetaan, että meillä on tämä esimerkki:
//Kaksiulotteisten muotojen luokka public class TwoDShape ( //Width public virtual int Width ( get; set; ) // Height public virtual int Height ( get; set; ) ) // Luokka Kolmio public class Kolmio: TwoDShape ( / /Tunnistenumero public virtual int Id ( get; set; ) //Kolmion tyyppi julkinen virtuaalinen merkkijono Tyyli ( get; set; ) )

Periaatteessa tässä kuvauksessa ei ole mitään monimutkaista, luomme johdetulle luokalle yksinkertaisesti yhden mappauksen, eli kolmiotaulukon.
//Kolmiokartoitus julkinen luokka TriangleMap: ClassMap ( julkinen kolmiokartta() ( Id(x => x.Id); kartta(x => x.tyyli); kartta(x => x.korkeus); kartta(x => x.leveys); ) )
Sovelluksen käynnistämisen jälkeen seuraava (tyhjä) taulukko ilmestyy Biblioteca-tietokantaan

Tunnisteet: Lisää tunnisteita

Tässä artikkelissa haluamme systematisoida kokemuksemme tietojen siirtämisestä suurissa yritysprojekteissa, jotka liittyvät asiakkaiden siirtymiseen töihin 1C:Enterprise 8 -kokoonpanoissa.

Samanaikaisesti artikkelin pääpaino asetetaan ennen kaikkea siirtoprosessin teknologiseen komponenttiin. Vaikutus myös organisaatioon, mutta vähäisemmässä määrin.

Termit ja määritelmät

Tietojen siirto ymmärretään yleensä lopulliseksi työjaksoksi, projektiksi, jonka tavoitteena on kertaluonteinen tiedon massasiirto lähdejärjestelmistä (historiallisista järjestelmistä) kohdejärjestelmään. Samalla näiden tietojen hyödyntäminen lähdejärjestelmissä lakkaa.

Tietojen siirto on erotettava tietojen integroinnista. Integraatio, toisin kuin migraatio, on pysyvä osa IT-arkkitehtuuria ja vastaa tietovirrasta eri järjestelmien ja tietovarastojen välillä – ja se on pikemminkin prosessi kuin projektitoiminta.

Siirtosuunnitelma näyttää yleisesti tältä:

Riisi. 1

Historialliset järjestelmät- Asiakkaan yrityksen tietokannat, jotka on tarkoitus korvata kokonaan tai osittain uuden järjestelmän käyttöönoton yhteydessä.

Vastaanotinjärjestelmä- kohdejärjestelmä, mielivaltainen konfiguraatio "1C:Enterprise 8".

Alkutiedot- historiallisista järjestelmistä ladatut tiedot mukautettuun xls-tiedostomuotoon. Tässä tapauksessa xls-muoto näyttää olevan yksi kätevimmistä, koska mahdollisuus ladata xls-tiedostoon on olemassa monissa "edellisten sukupolvien" kirjanpitojärjestelmissä.

Nykyaikaisena vaihtoehtona on mahdollista harkita xml-tiedostomuotoa siirtona.

On myös vaihtoehtoja välitietokannan käyttöön.

Muutos, muunnos- prosessi, jossa lähdetiedot muunnetaan dataksi latausta varten. Tietojen muunnos tapahtuu latausmallien mukaisesti. Muunnoksen tulos on ladattava data.

Ladattavat tiedot- vastaanottavaan järjestelmään ladattavat tiedot. Tämä artikkeli ja lähdetiedot käsittelevät xls-muotoa.

Tietomallit latausta varten- kuvaus kohdejärjestelmään ladattavista tietotaulukoista.

Muuttoliikkeen vaiheet

Harkitsemme siirtymisen valmistelua ja suorittamista vaihe vaiheelta.

Siirron organisatoriset vaiheet sisältävät seuraavat seikat:

· Muuttostrategian määrittely. Tässä vaiheessa Urakoitsija ja Tilaaja sopivat siirtotyön toteuttamistekniikasta;

· Siirtotyöryhmän kokoonpanon määrittäminen. Työryhmään tulee kuulua sekä urakoitsijalta että tilaajalta asiantuntijoita, jotka tuntevat riittävän hyvin historiallisten järjestelmien toiminnan (asiakkaan puolelta) ja kohdejärjestelmän (urakoitsijan puolelta);

· Alustava siirtymäsuunnitelma. Siirtymäsuunnitelmaa tarkistetaan useita kertoja projektin edetessä;

· Aikajaksot tietojen lataamiselle historiallisista järjestelmistä, tietomäärät. Siirtojen tietojen katkaisuajat, testipäivät ja lopulliset siirrot. Nämä tiedot voidaan liittää siirtosuunnitelmaan;

· Siirrettävien tietojen kokoonpano. Viitetiedot, luokittelijat, tapahtumatiedot, saldot, liikevaihto jne.;

· Tietojen laadun, oikeellisuuden ja eheyden tarkistamiseen liittyvät kysymykset siirtoprosessin aikana ja sen lopussa;

· Ongelmat, jotka liittyvät edelliseen tilaan palaamiseen vikojen sattuessa.

Tarkastellaanpa yksityiskohtaisemmin muuttoliikkeen teknisiä vaiheita.

Riisi. 2

1.Tietojen latausmallien valmistelu

Tietojen latausmalli sisältää tekniset kuvaukset ladattavista tietotaulukoista, algoritmit ja lataussäännöt nykyiselle mallipohjalle.

Jokainen malli kohdistaa yleensä yhteen tai useampaan aiheeseen liittyvään taulukkoon kohdekohdejärjestelmässä.

Mallissa sanotaan:

· Kuvaus kaikista ladattavan xls-datatiedoston kentistä, mukaan lukien:

o Kentän nimi

o Ilmaisin, että kenttä on täytettävä

o Esimerkki kentän täyttämisestä

o Huom

· Kuvaus säännöistä kohdejärjestelmän taulukon lataamiseen ladattavien tietojen perusteella (jono useiden toisiinsa liittyvien taulukoiden tapauksessa, avainkenttien hakualgoritmit jne.)

· Kuvaus kohdejärjestelmätaulukoiden kenttien täyttämisestä suoraan, jos tarjotaan muuta kuin tiedon siirtäminen "yksi yhteen" datatiedostosta ladattaviksi. Koskee esimerkiksi viitekenttiä.

Urakoitsijan tulee tässä vaiheessa työskennellä myös tiedostojen lataaja valmistella latausta varten. Kun työskentelet xls-tiedostojen kanssa, tämä tehtävä ei ole erityisen vaikea.

2.Tietolähteiden tunnistaminen

Tämä vaihe voi alkaa yhdessä edellisen vaiheen kanssa "1. Valmistellaan tietojen latausmalleja."

Tässä vaiheessa Asiakkaan asiantuntijat päättävät, mistä järjestelmistä ja mitä tietoja voidaan ladata. Sinun tulisi myös määrittää, mitä tietoja Voi olla saattaa olla tarpeen.

Pääsääntöisesti suurissa migraatioprojekteissa täydellisen tyhjentävän tietolähteiden luettelon tunnistaminen voi kestää melko kauan ja tapahtuu työn jatkuessa myöhemmissä vaiheissa.

Usein tulee tilanteita, joissa tiedon eheyden edelleen varmistamiseksi joudutaan siirtämään osa tiedoista painetuista lähteistä (digitoida) tai jopa syöttämään taulukoihin Asiakkaan avainhenkilöiden sanojen mukaan.

Tässä vaiheessa sinun tulee kuitenkin yrittää tunnistaa mahdollisimman paljon tarpeellista tietoa.

3. Lähdetietojen lataaminen

Tietojen lataaminen historiallisista järjestelmistä voi viedä melko paljon aikaa, varsinkin jos järjestelmiä on useita, ne ovat erilaisia ​​ja Asiakkaan eri jaostot ovat niistä vastuussa. Tämä seikka on otettava huomioon testi- ja loppusiirtymien aikana.

Kätevin vaihtoehto näyttää olevan lataaminen xls-tiedostoihin. Monet vanhemmat IT-järjestelmät tukevat tätä vaihtoehtoa.

Voi myös olla vaihtoehtoja lataamiseen csv-, dbf-, xml-muotoon ja muihin muotoihin.

On syytä huomioida, että syystä tai toisesta (esimerkiksi tietoturva-asiat) Asiakas ei voi tässä vaiheessa aina tarjota datalatauksia kokonaisuudessaan! Vain tietorakenne ja muutama testipaikka. Näin ollen voi syntyä tilanne, että testi- ja loppukuormituksen aikana lähdetaulukoissa havaitaan heikkolaatuista dataa, mikä johtaa odottamattomiin virheisiin.

Tämän ongelman minimoimiseksi historiallisista järjestelmistä suoritettavien testilatausten määrästä tulee sopia etukäteen.

4. Tietojen kartoitus

Kartoitus (datan kartoitus) - yleensä prosessi, jossa verrataan tietoja historiallisista järjestelmistä ja vastaanottavasta järjestelmästä. Eli lähdetiedot ja ladattavat tiedot.

Kartoitusvaihe on työvoimavaltaisin vaihe, ja se voi viedä yli 50 % kaikesta siirtotehtävän työstä.

Tässä vaiheessa koko migraatioprojektin työryhmä on täysin mukana.

Tietojen kartoitusprosessissa on tarpeen erottaa taulukkokartoituksen ja kenttäkartoituksen alivaiheet.

· Taulukoiden kartoitus tai mallien kartoitus - lähdetietojen taulukoiden ja tietomallien vertailu latausta varten. Ottelu voi olla joko 1:1 tai N:N. Tämän työn tuloksena taulukkokartoitusrekisteri kootaan ja ylläpidetään. Tämä osavaihe on välttämätön kenttäkartoituksen seuraavalle osavaiheelle ja kartoituksen yleisen tilan seurannalle.

Ryhmä 1C-malleja

1C-mallin nimi

Tiedoston nimi-

lähde

Säännöt lähdetiedoston luomiseksi

Vastuullinen

Tila

Huomautus

NSI

Näyte_

Nimikkeistö

Nomenk

latura.xls

Aseta valinta järjestelmässä N
. Tallenna txt-muotoon
. Avaa xl:ssä, sarakkeet ovat tekstiä
. Ensimmäinen rivi on otsikko
. Sarakkeiden lukumäärä - 15
. Tarkista rivien määrä txt- ja xls-tiedostoissa
. Taulukon nimi on aina "Sheet1"

Ivanov I.I.

töissä

· Kenttäkartoitus - taulukkokenttien yhdistäminen jo määritellyn taulukkokartoituksen sisällä. Tämän työn tuloksena on kenttäkartoitusrekisteri.

№ s

Cl. ala

Edellytetään

1C mallin kentän nimi "Malli_nimikkeistö"

Kuvaus

Kentän nimi "Nomenclature.xls"

Täyttöalgoritmi

Koodi

Hakemistoelementin koodi

Koodi

Nimi

Nimi

Joo

Tämä ryhmä

Sisältää yhden seuraavista arvoista:
. 1 - ryhmille
. 0 - elementeille

Jos koodin pituus = 11 merkkiä ja 4 viimeistä merkkiä<>"0000", tämä elementti on "0", muuten ryhmä on "1".

Koko nimi

Hakemistoelementin nimi

Nimi

Jos ThisGroup = 1, sitten "", ElseIf ThisGroup = 0, niin Nimi.

Osana tätä vaihetta tulisi myös tehdä mahdollista tietojen normalisointityötä.

5. Muunnossääntöjen valmistelu

Toisin kuin aiemmat vaiheet, tämä vaihe on tekninen ja siihen liittyy urakoitsijan kehittäjä.

Sovittujen kenttäkartoitusrekisterien perusteella Urakoitsijan asiantuntijat kehittävät säännöt tiedon muuntamiseen.

Siirron valmisteluvaiheiden sekä edelleen, testi- ja loppumigraatioiden aikana tapahtuvaa operatiivista työtä varten on tärkeää, että käytettävissä on kätevä ympäristö tietojen muuntamisen sääntöjen (skriptien) kehittämiseen ja ympäristö lähdetietojen muuntamiseksi dataksi latausta varten.

Tämän ympäristön vaatimuksia ovat:

· Muunnossääntöjen kehittämisen mukavuus ja nopeus;

· Tietojen muuntamisen nopeus. Tulo- ja tulostustiedostot voivat olla satoja tuhansia rivejä pitkiä!

· Kyky työskennellä useiden syöttötiedostojen kanssa samanaikaisesti;

· Mahdollisuus tallentaa muunnossäännöt erillisiin tiedostoihin.

Siirtymäprojekteihimme olemme kehittäneet erikoistuneen kehittäjän työaseman, joka perustuu 1C Query Console -standardin käsittelyyn.

Kyselykonsolin käsittelyä on parannettu mahdollistamaan suorat kyselyt xls-tiedostoihin.

Tässä on esimerkki kahden lähde-xls-tiedoston yhdistämisestä Työntekijät.xls


Työntekijän koodi

Sukunimi

Nimi

Sukunimi

Syntymäaika

2423

Ivanov

Ivan

Ivanovitš

17.11.1992

1523

Petrov

Basilika

Aleksandrovich

04.02.1991

4363

Sidorov

Kirill

Nikolajevitš

01.05.1995

Denisov

Denis

Denisovich

01.01.1990

Ja Toiminnot.xls sivuilla:

Poistot

Työntekijän koodi

Päivämäärä

Summa

2423

01.02.2014

1523

02.02.2014

4363

03.02.2014

04.02.2014

100000

2423

05.02.2014

1523

06.02.2014

4363

07.02.2014

2356

08.02.2014

140000

2423

09.02.2014

1523

10.02.2014

4363

11.02.2014

23523

12.02.2014

80000

Ja Kuitit:

Työntekijän koodi

Päivämäärä

Summa

01.05.2004

02.05.2004

03.05.2004

04.05.2004

2423Syntymäaika

Kuitin summa

Poistettu määrä

Ivanov Ivan Ivanovitš

2423

17.11.1992

1341234

1010

Petrov Vasili Aleksandrovitš

1523

04.02.1991

245245

Denisov Denis Denisovich

01.01.1990

380000

320000

Sidorov Kirill Nikolajevitš

4363

01.05.1995

613382

26336

KAIKKI YHTEENSÄ:

2579861

347842

Huomaa, että esimerkki on keinotekoinen, ja se on erityisesti valittu osoittamaan kaikki mahdolliset tietolähteiden muuntamisen vaiheet.

Muunnosoperaatioiden tekninen järjestys tässä on seuraava:

Käyttämällä Access SQL -kyselykieltä (joka tarjoaa merkittäviä lisäominaisuuksia verrattuna 1C-kyselykieleen) luodaan ensimmäinen kysely, joka poimii tiedot xls-tiedostosta 1C-ympäristöön. Samalla erilaiset tarkastukset ja tietojen normalisointi ovat jo tässä vaiheessa mahdollisia.

ADO-tietojen käyttötekniikka tarjoaa suuren nopeuden.

Riisi. 3

2. Kysely 1C-kielellä - pääkysely, joka toteuttaa kenttäkartoitusalgoritmin. Ja myös: ladattujen tietojen rikastaminen 1C-tietokannan tiedoilla, uudelleenryhmittely, yhdistäminen kyselyjen tuloksiin muihin lähde-xls-tiedostoihin jne.

3. 1C-pyynnön tuloksen jälkikäsittely tarvittaessa. Toteutettu skriptillä 1C-kielellä.

Esimerkiksi tässä otamme käyttöön "TOTAL"-rivin lisäyksen summasarakkeisiin.

4.Kirjoita lopullinen tietojoukko xls-tiedostoon.

Yleensä tulos on lopulliset tiedostot, jotka ladataan kohde 1C -tietokantaan.

Tämän työkalun avulla voit myös tallentaa tietojen muunnossäännöt erilliseen xml-tiedostoon:

Lisäksi on mahdollista työskennellä V erätila, mikä on erityisen tärkeää, kun siirrettävää dataa on suuri määrä heterogeenista.

Edellisissä vaiheissa työn valmisteleva osa pääsääntöisesti päättyy - kaikki tietolähteet tunnistetaan, lähdetiedot ladataan lähteistä, latausmallit valmistetaan kohdetietokantaan, datakartoitus valmistetaan ja lopuksi kehitetään datan muunnoskomentosarjat. .

On huomattava, että ennen lopullista siirtoa sinun tulee ehdottomasti suorittaa useita testejä. Testimigraatioiden aikana urakoitsija tunnistaa yhdessä asiakkaiden kanssa:

Muunnosvirheet, tietojen latausvirheet

Tee alustava arvio kohdejärjestelmään ladattujen tietojen laadusta

Testimigraatioiden tulosten perusteella he laativat/päivittävät lopullisen siirtosuunnitelman

7. Tietojen täsmäytys

Ladattujen tietojen laatu tulee tarkistaa sekä koesiirtojen jälkeen että lopullisen siirron lopussa. Täsmennyksen aikana voidaan tarkistaa seuraavat indikaattorit:

· Saldojen kokonaismäärien yhteensopivuus asiakirjojen mukaan;

· Määrälliset vastaavuudet, esimerkiksi käyttöjärjestelmien lukumäärä;

· Yksittäisten valittujen kokonaisuuksien oikea täyttö;

Huomaa, että tietyt siirtotietojen tarkistukset ja tietojen normalisointiongelmat on ratkaistava kaikissa siirtoprosesseissa. Sinun on aina kysyttävä itseltäsi, mitä on tehtävä nykyisessä vaiheessa, jotta vältytään virheiltä myöhemmissä vaiheissa.

Esimerkiksi:

· Tarkista kaksoiskappaleet avainkenttien mukaan. Se voidaan ja pitää suorittaa alkuperäisillä tiedoilla;

· Kenttätyyppien pakottaminen;

· Referenssin eheys;

· Matemaattiset epäjohdonmukaisuudet. Esimerkiksi tyhjien numerokenttien tarkistaminen, joihin jako on suunniteltu muunnoksen aikana;

· Yleisesti ottaen pakolliset kentät on täytetty;

· Väärien merkkien korvaaminen. Esimerkiksi englanninkieliset merkit kyrillisissä kentissä ("o", "a", "e" jne.) Tämä koskee erityisesti avainkenttiä!

· Tarkistaa merkkijonokenttien arvojen yhteensopivuuden vastaanottavan järjestelmän tyyppien kanssa (pituusrajoitukset)

Lopullisen migraation jälkeen tehdään ennalta määrätyn migraatiostrategian ja migraatiosuunnitelman mukaisesti päätös historiallisten järjestelmien jatkotoiminnasta.

Usein toiminto valmistuu heti lopullisten tietojen täsmäytysten ja siirron onnistumisen kirjaamisen jälkeen - uuden järjestelmän käyttäjät eivät enää pidä kirjaa kahdessa järjestelmässä rinnakkain, vaan siirtyvät kokonaan uuteen järjestelmään. Samaan aikaan pääsy vanhaan järjestelmään säilyy lukutilassa.

Joissakin tapauksissa kahden järjestelmän rinnakkaista toimintaa voi esiintyä koekäytön (TE) aikana ja jopa tämän ajanjakson jälkeen. Kysymys käyttäjien rinnakkaisesta työstä kahdessa järjestelmässä liittyy läheisesti kysymykseen mahdollisuudesta palata vanhaan järjestelmään, jos siirtyminen (tai yleensä uuden järjestelmän toiminta!) katsotaan epätyydyttäväksi.

Johtopäätös

Lopuksi haluaisin huomauttaa, että kun on kyse suurten tapahtumajärjestelmien siirtämisestä, jotka sisältävät monia 1C:Enterprise-kokoonpanoja, siirtyminen uuteen järjestelmään voi olla erittäin työvoimavaltaista.

Siksi on muistettava, että jokainen tällainen hanke vaatii huolellista valmistelua ja siihen on liitettävä henkilökohtainen suunnitelma. Kuitenkin riippumatta siirrettävien järjestelmien tyypistä, tietokantavolyymeista jne., yleinen siirtomalli näyttää lähes identtiseltä.