2013-11-25 11 views
8

In meiner Java-App möchte ich Informationen abrufen, die in meiner Oracle-Datenbank mit JPA gespeichert sind. In meiner Datenbank habe ich eine Ansicht mit einer Reihe von Spalten, die ich von anderen Tabellen bekommen habe. Ich möchte diese Ansicht zuordnen. Meine Ansicht hat jedoch keinen Primärschlüssel, daher kann ich keine JPA-Entität erstellen. Ich dachte über Verwenden Sie 2 Spalten als Foreign Keys.Zuordnung einer SQL-Ansicht ohne Primärschlüssel zu JPA-Entität

Was ist der beste Weg, das zu implementieren? Ich habe so viele unterschiedliche Ansätze gesehen, dass ich nicht entscheiden kann, welches für diesen Fall das Beste ist.

Antwort

6

Eine Möglichkeit, dies zu lösen, ist einen zusammengesetzten Primärschlüssel verwenden, indem nur die @Id Anmerkung in den entsprechenden Felder hinzufügen.

+1

Danke, mit einem Composite-Primärschlüssel (mit @IdClass Annotation) löste ich mein Problem. – user2144555

+0

Danke das ist die Lösung, die @Id zur Ansicht hinzugefügt löste mein Problem, ich benutze Arquillian, also musste ich die Entität für die Ansicht hinzufügen und ein weiteres Feld hinzufügen, um den Primärschlüssel hinzuzufügen – cabaji99

3

Es gibt keinen besten Ansatz. Da es sich um eine Ansicht handelt, werden Sie niemals Daten darin einfügen, was bedeutet, dass Sie einfach einen Primärschlüssel über einem der vorhandenen Felder definieren können. Sie könnten auch versuchen, dieses Feld mit insertable=false, updatable=false zu markieren.

UPDATE

Sie kennen Ihre Daten besser, aber im Allgemeinen in einer Ansicht können Sie nicht garantieren, dass alle Datensätze eindeutig sind, weshalb sollte man im Allgemeinen vermeiden direkt mit Personen aus der Arbeits Aussicht. Ich würde vorschlagen, eher mit einer Wrapper-Klasse arbeiten, so etwas wie:

SELECT new com.domain.MyWrapper(field1, field2, field3, field4,...) FROM ViewEntity 
+1

Das funktioniert nicht, wenn ich Informationen über Zeilen in der Tabelle erhalten, in denen das Feld als Primärschlüssel den gleichen Inhalt hat. Es wird kein Fehler angezeigt, aber die Informationen werden geändert. – user2144555

+0

Die Antwort wurde aktualisiert. –

+0

Wenn ich Ihre Antwort schon vor einiger Zeit gesehen hätte, würde ich niemals einen Blick auf die Datenbank werfen und sie als Entity abbilden. Die Einzigartigkeit hat meine App-Berichte gelöscht, und deshalb habe ich fast mein Projekt aufgegeben ... Danke – ViniciusPires

Verwandte Themen