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.