Java >> Java tutorial >  >> Tag >> class

Dvaletips:Sådan tilsidesætter du kolonnetilknytninger af en superklasse


Hibernate Tips er en række indlæg, hvor jeg beskriver en hurtig og nem løsning på almindelige Hibernate-spørgsmål. Hvis du har et spørgsmål til et fremtidigt Hibernate Tip, bedes du skrive en kommentar nedenfor.

Spørgsmål:

For et par dage siden fik jeg et interessant spørgsmål fra en af ​​mine Advanced Hibernate Online Training-elever. Han brugte @MappedSuperclass-strategien til at kortlægge et arvehierarki til flere databasetabeller og ønskede at ændre attributtilknytningen for en af ​​underklasserne.

Så han spurgte mig:Hvordan kan jeg tilsidesætte attributtilknytningen i et arvehierarki?

Løsning:

Tilsidesættelse af en attributtilknytning for en @MappedSuperclass kortlægningen er forholdsvis enkel. Du kan gøre det på samme måde, som du tilsidesætter kortlægningen af ​​en integreret enhed.

Men før vi taler om at tilsidesætte kortlægningen, lad os først tage et hurtigt kig på en arvekortlægning, der bruger @MappedSuperclass strategi.

Arvetilknytninger ved hjælp af @MappedSuperclass

Denne tilgang giver dig mulighed for at definere delte attributter og deres tilknytninger på en superklasse uden at gøre superklassen til en enhed. Så superklassen bliver ikke styret af din persistenskontekst og ikke kortlagt til en databasetabel. Men alle dens underklasser kan være administrerede entiteter, som bliver mappet til deres egne databasetabeller.

Hvis du anvender denne tilknytning til følgende klasser, vil Publikation klasse er ikke en enhed og bliver ikke knyttet til en databasetabel. Men bogen og BlogPost entiteter er entiteter, der bliver mappet til databasetabeller med samme navn.

Jeg forklarede denne og andre kortlægningsstrategier for arvshierarkier i store detaljer i min komplette guide til arvekortlægninger.

Tilsidesættelse af en attributtilknytning

Lad os nu ændre kortlægningen af ​​oversigten attribut for bogen så det bliver tilknyttet blurb kolonne i bogen tabel.

Du kan bruge @AttributeOverride anmærkning på bogen enhed til at tilsidesætte kortlægningen af ​​hver egenskab defineret af Publication klasse. Du behøver kun at angive navnet på den attribut, som du vil ændre tilknytningen for, og en @Column annotation.

I dette eksempel henviser jeg til resuméet attribut og angiv en @Column annotation, der sætter databasekolonnen til blurb .

@Entity
@AttributeOverride(name = "summary", column = @Column(name = "blurb"))
public class Book extends Publication { ... }

Test af kortlægningen

Hvis du derefter bruger bogen enhed til at læse eller skrive en databasepost, som jeg gør i følgende testcase, kan du bruge alle attributter, der er kortlagt af Publication superklasse.

EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

Book b = new Book();
b.setTitle("Hibernate Tips - More than 70 solutions to common Hibernate problems");
b.setNumPages(250);
b.setPublishingDate(LocalDate.of(2017, 4, 4));
b.setSummary("When you use Hibernate in your projects, you quickly recognize that you need to do more than just add @Entity annotations to your domain model classes...");
em.persist(b);

em.getTransaction().commit();
em.close();

Når du aktiverer logningen af ​​de udførte SQL-sætninger, kan du se, at Hibernate bruger den tilknytning, der er defineret af Publication klasse for alle attributter undtagen sammendraget attribut. @AttributeOverride anmærkning på bogen enhed ændrede denne tilknytning til sløret kolonne.

08:42:19,319 DEBUG [org.hibernate.SQL] - 
    select
        nextval ('hibernate_sequence')
08:42:19,376 DEBUG [org.hibernate.SQL] - 
    insert 
    into
        Book
        (publishingDate, blurb, title, version, numPages, id) 
    values
        (?, ?, ?, ?, ?, ?)
08:42:19,722 DEBUG [org.hibernate.SQL] - 
    select
        book0_.id as id1_2_,
        book0_.publishingDate as publishi2_2_,
        book0_.blurb as blurb3_2_,
        book0_.title as title4_2_,
        book0_.version as version5_2_,
        book0_.numPages as numPages6_2_ 
    from
        Book book0_ 
    where
        book0_.id=?
08:42:19,740 INFO  [org.thoughts.on.java.model.TestInheritance] - Book title: Hibernate Tips - More than 70 solutions to common Hibernate problems

Få flere oplysninger:

Hvis du kunne lide denne artikel, er du muligvis også interesseret i:

  • Komplet vejledning:Nedarvningsstrategier med JPA og Hibernate
  • Komposition vs. arv med JPA og Dvale
  • Tip til dvale:Sådan downcaster du enheder i JPQL-forespørgsler

Dvaletipsbog







Få flere opskrifter som denne i min nye bog Hibernate Tips:Mere end 70 løsninger på almindelige dvaleproblemer.

Den giver dig mere end 70 klar-til-brug opskrifter til emner som grundlæggende og avancerede kortlægninger, logning, Java 8-understøttelse, caching og statisk og dynamisk definerede forespørgsler.

Få det nu!



Java tag