yhdistetyt ensisijaiset avaimet yhteisessä parlamentaarisessa edustajakokouksessa

Johdanto

tässä opetusohjelmassa opimme yhdistetyistä ensisijaisista avaimista ja niitä vastaavista merkinnöistä yhteisessä parlamentaarisessa edustajakokouksessa.

Yhdistelmäavaimet

yhdistelmäavain – jota kutsutaan myös yhdistelmäavaimeksi – on kahden tai useamman sarakkeen yhdistelmä, joka muodostaa taulukon ensisijaisen avaimen.

YHTEISNÄPPÄINTEN määrittelyyn on kaksi vaihtoehtoa: @IdClass ja @EmbeddedId-merkinnät.

yhdistettyjen ensisijaisten avainten määrittelemiseksi tulisi noudattaa joitakin sääntöjä:

  • yhdistelmäavainluokan on oltava julkinen
  • sillä on oltava no-arg – konstruktori
  • sen on määriteltävä yhtälöt() ja hashCode() menetelmät
  • sen on oltava sarjamuotoinen

Idluokan Huomautus

Let sanotaan, että meillä on taulukko nimeltä tili ja siinä on kaksi saraketta – tilinumero, Accountype-jotka muodostavat yhdistelmäavaimen. Nyt meidän on kartoitettava se parlamentaarisessa edustajakokouksessa.

yhteisen parlamentaarisen edustajakokouksen määrittelyn mukaisesti luodaan AccountId-Luokka näillä ensisijaisilla avainkentillä:

public class AccountId implements Serializable { private String accountNumber; private String accountType; // default constructor public AccountId(String accountNumber, String accountType) { this.accountNumber = accountNumber; this.accountType = accountType; } // equals() and hashCode()}

seuraavaksi liitetään Tililuokka entiteettitiliin.

tätä varten olio pitää merkitä merkinnällä @IdClass. Meidän on myös ilmoitettava tililuokan kentät entiteettitilillä ja merkittävä ne merkinnällä @Id:

@Entity@IdClass(AccountId.class)public class Account { @Id private String accountNumber; @Id private String accountType; // other fields, getters and setters}

EmbeddedId-merkintä

@EmbeddedId on vaihtoehto @IdClass-merkinnälle.

tarkastellaan toista esimerkkiä, jossa meidän on säilytettävä joitakin tietoja kirjasta, jonka otsikko ja kieli ovat ensisijaisia avainkenttiä.

tässä tapauksessa ensisijainen avainluokka, BookId, on merkittävä merkinnällä @Embeddable:

@Embeddablepublic class BookId implements Serializable { private String title; private String language; // default constructor public BookId(String title, String language) { this.title = title; this.language = language; } // getters, equals() and hashCode() methods}

sitten, meidän täytyy upottaa tämän luokan kirja entity käyttäen @EmbeddedId:

@Entitypublic class Book { @EmbeddedId private BookId bookId; // constructors, other fields, getters and setters}

@IdClass vs @EmbeddedId

kuten juuri näimme, näiden kahden pinnan ero on se, että @IdClass: n kohdalla jouduimme määrittelemään sarakkeet kahdesti – kerran AccountId: ssä ja uudelleen Accountissa. Mutta, @Embeddedidin kanssa emme.

on joitakin muitakin tradeoffeja, vaikka.

esimerkiksi nämä erilaiset rakenteet vaikuttavat KIRJOITTAMIIMME JPQL-kyselyihin.

esimerkiksi @Idclassin kanssa kysely on hieman yksinkertaisempi:

SELECT account.accountNumber FROM Account account

kanssa @EmbeddedId, meidän täytyy tehdä yksi ylimääräinen traversal:

SELECT book.bookId.title FROM Book book

myös @IdClass voi olla varsin hyödyllinen paikoissa, joissa käytämme komposiittiavainluokkaa, jota emme voi muokata.

lopuksi, jos aiomme käyttää osia komposiittiavaimesta erikseen, voimme käyttää @Idclassia, mutta paikoissa, joissa käytämme usein koko tunnistetta objektina, @EmbeddedId on edullinen.

Conclusion

tässä nopeassa artikkelissa tutustutaan yhteisen parlamentaarisen edustajakokouksen komposiittisiin ensisijaisiin avaimiin.

kuten aina, tämän artikkelin täydellinen koodi löytyy Githubista.

Vastaa

Sähköpostiosoitettasi ei julkaista.