# JPA-Modellierung



## fischefr (11. Apr 2008)

Hallo Zusammen!
Vielleich kann mir jemand etwas weiterhelfen. Ich versuche folgende Konstellation mit JPA zu modellieren:

2 Entitäten: D und DZS, wobei eine 1 zu n Beziehung zwischen den beiden besteht

Der Primärschlüssel von D ist eine (numerische ID)
Der Primärschlüssel von DZS besteht aus dem D (bzw. dessen ID) und einem String  (Variablenname "art")

Zunächst habe ich versucht, Art und D in eine Embeddible-Klasse auszulagern und diese in DZS einzubinden. Lt. Api ist allerdings ein @JoinColumn darin nicht zulässig.

Wie modelliere ich das richtig d.h. wie müssen die Modelklassen mit den Annotations aussehen? Das Datenbankschema darf ich dabei nicht verändern.
Kann JPA (genauer Topllink Essentials) das überhaupt so abbilden? Mein Problem liegt darin, dass in DSZ D sowohl foreign key als auch Bestandteil des eigenen Primärschlüssels ist.


----------



## maki (11. Apr 2008)

Wieso willst du denn technischen Schlüssel (id) mit einem fachlichen (art) mischen um einen Primärschlüssel zu erhalten?

IMHO der falsche Weg.

Technischer Schlüssel sorgt für technische Identität, für die fachliche "Gleichheit" sollte man equals und hashcode überschreiben, wobei weder die eine noch die andere Methode den technischen Schlüssel nutzen sollte, sondern ausschliesslich fachliche Attribute/properties.


----------



## fischefr (11. Apr 2008)

Es gibt eine Menge von Arten, die jeweil pro ID 1x vorkommen können, aber das steht eigentlich gar nicht zur Debatte, weil ich das nicht ändern kann.

ID von D und der Wert von Art sind nun mal in der Tabelle von DZS als Primärschlüssel definiert - daran kann ich definitiv nichts rütteln.

Die Tabelle ist fix, ich kann nur die Model-Klassen an die Vorgabe anpassen. Wie setz ich das am geschicktesten jetzt um?


----------



## maki (11. Apr 2008)

IMHO ist JPA dafür der falsche Weg bestehende Datenmodelle als Objekte darzustellen.

Die Objekte/Klassen werden dann nämlich anhand der Tabellen abgebildet, aus einem ER Modell mal schnell ein Domainmodell zu machen ist nicht einfach bzw. nicht immer möglich.

Bei einfacheren Schemas sollte es gehen, es soll für Hibernate ein paar Tools geben welche das können.


----------



## foobar (11. Apr 2008)

MyEclipse kann aus einem DB-Schema Hibernate, EJB oder JPA Klassen erzeugen. Das funktioniert sehr gut und spart ne Menge Zeit. Ein Hoch auf MyEclipse


----------



## byte (11. Apr 2008)

Jo, nennt sich Hibernate Tools und ist ein freies Eclipse Plugin. :roll:


----------



## FischeFr_ (12. Apr 2008)

Tja, bin jetzt einen Schritt weiter denk ich.
Hab jetzt ein Modell, das theoretisch funktionieren sollte, leider wird dabei D als Teil des Primärschlüssels ignoriert d.h. werd jetzt wohl mit einem dirty hack arbeiten müssen. Ich fürchte ich bin da wohl wirklich an die Leistungsgrenzen von TopLink Essentials gestoßen. Am Montag gehts weiter mit dem Mist.


----------

