Menu

JPA Mapping

Probleme
2013-07-12
2013-08-05
  • Benni Koppe

    Benni Koppe - 2013-07-12

    Hallo zusammen,

    ich suche seit längerem an einem Fehler in meinem Mapping.
    Ich möchte den Ärzten Fachbereiche zuweisen. Stefan hat mir mal gesagt, ich soll immer genau hinterfragen welche Attribute die Entität "Arzt" tatsächlich braucht.
    Daher bin ich mir 1. gerade unsicher ob es richtig ist die Fachbereiche in der Arzt-Klasse als Liste zu halten. Und 2. hab ich wohl einen Fehler im Mapping mittels JoinTable.
    Ich hab mal zwei kleine Diagramme hochgeladen um darzustellen was ich vor habe:
    Klassendiagramm und Datenbank.

    Die Klasse Arzt hab ich nun folgendermaßen annotiert:

    @ManyToMany
    @JoinTable(name="aerzte_fachbereiche", 
        joinColumns=@JoinColumn(name="arzt_id", referencedColumnName="id"), 
    inverseJoinColumns=@JoinColumn(name="fachbereich_id", referencedColumnName="id")
    )
    

    somit wollte ich erreichen, dass die Fachbereiche gleich mitgeladen werden.
    Es fliegt zwar keine Exception, aber die Fachbereichsliste bleibt leer. Arzt ist von User abgeleitet. Vielleicht ist das ein Problem?
    DB hab ich natürlich angepasst.

     
  • Marc L.

    Marc L. - 2013-07-18

    Hallo Benni,

    hab deinen Beitrag leider erst jetzt entdeckt und leider heute den ganzen Tag Besprechungen, so dass ich jetzt auch keine Zeit habe, in den Code zu schauen.

    Da es sich wohl um die Fachbereiche handelt, denen der Arzt angehört, ist eine Collection davon in der Klasse Arzt wohl OK, wenn du sie z.B. zum Arzt stets anzeigen musst.

    Dass Arzt von User abgeleitet ist, sollte für das Laden der Assoziation kein Problem sein. Die Liste ist wirklich leer, d.h., es fliegt nicht zufällig eine LazyInitializationException (eine solche würde darauf hindeuten, dass außerhalb der Transaktion darauf zugegriffen wird)? Sind denn zu dem Arzt, den du lädst, wirklich Daten in der DB? Hast du die Relationstabelle aerzte_fachbereiche und die IDs genau überprüft? Hast du mal testweise ein "from Arzt" ausgeführt, um alle Ärzte zu laden, und in den darin enthaltenen Arzt-Objekten in die Fachbereichs-Collections geschaut? Ebenfalls leer?

    Dein Datenbank-Diagramm passt nicht zu den oben angegebenen Annotationen (z.B. Relationstabelle "Ärzte_Fachbereiche" mit anderen Fremdschlüsselattributen). Heißen vielleicht die Tabellen falsch, sind die einen (von Hibernate erwarteten) leer, die anderen (falschen) nicht?

    Viele Grüße
    Marc

     
  • Benni Koppe

    Benni Koppe - 2013-08-05

    Hi Marc,

    erstmal Danke für die Hinweise.
    Die Antwort hat jetzt eine Weile auf sich warten lassen, weil ich mir einfach mal zwei Wochen Urlaub gegönnt habe.

    Ich bin irgendwann darauf gekommen, dass die Fachbereiche geladen werden, wenn ich "fetch" mit angebe:

    @ManyToMany(fetch=FetchType.EAGER)
    

    Mit den Fehlern im Diagramm hast Du natürlich recht. Sorry!

    Danke
    Benni

     

Log in to post a comment.

Auth0 Logo