2016-03-23 2 views
0

Ich mache ein Datenbankmigrationstool und beschäftige mich mit einer Quellendatenbank, die sehr unhandlich ist. Es ist im Grunde ein riesiger Tisch, der mehr als 40-50 Spalten hat. Aber nicht alle diese Spalten sind nützlich für mich. Ich will nur vielleicht ein Dutzend von ihnen. Sobald ich diese Daten erhalte, mache ich Anfragen an einen Webdienst, der alles am Zielende der Migration abwickelt.Kann ich eine Entität haben, die nur einigen Spalten einer Tabelle entspricht?

Meine Optionen bestehen grundsätzlich darin, Abfragen manuell zu erstellen, um nur die gewünschten Spalten auszuwählen, oder eine Entität zu erstellen, die die gewünschten Spalten abbildet. Ich bin nicht so vertraut mit der Verwendung von JPA, also bin ich mir nicht sicher, ob dies möglich oder in Ordnung ist.

Kann ich etwas tun, wie

@Entity 
class SomeEntity{ 

    @Column(name = "ColumnA") 
    private String columnA; 
    @Column(name = "ColumnB") 
    private String columnB; 
} 

, wenn die Spalten in der Datenbank vorhanden sind, zum Beispiel

Column A | Column B | Column C | Column D 

Will Eclipse Karte nur die Spalten I mit Anmerkungen versehen oder es wird versucht, beschwert Spalten zuordnen in die Datenbank zu Feldern, die nicht in meiner Entität existieren? Ich weiß, @Transient wird Felder markieren, die nicht beibehalten werden sollen. Aber ich möchte das Gegenteil tun und Datenbankspalten ignorieren und die Tabelle nur teilweise einer Klasse zuordnen.

+2

Wenn sie schreibgeschützt sind, können Sie Entitäten nur mehrere Spalten zuordnen, kein Problem damit. Abgerufen werden nur die Spalten, die Sie in '@ Entity' deklariert haben. Um sicher zu gehen, sollten Setter "geschützt" werden, um Unveränderbarkeit auf Anwendungsebene zu erzwingen. –

+0

Grundsätzlich ja, aber Sie müssen auf jeden Fall eine '@ Id' (oder gleichwertig) definieren. Es ist nicht erforderlich, eine Ansicht auf Datenbankebene zu erstellen, wie es in der akzeptierten Antwort vorgeschlagen wird. – stg

Antwort

1

sollten Sie eine Ansicht erstellen. Lassen Sie die Ansicht so viele Spalten enthalten, wie Sie für relevant halten. Definieren Sie diese Spalten als Felder in einer Klasse und verdrahten Sie diese wie gewohnt mit Hibernate-Annotationen. Beachten Sie jedoch, dass Sie nur Auswahlen in einer Ansicht ausführen können, sodass Einfügungen/Aktualisierungen/Löschungen nicht in Frage kommen.

+0

Die massive Tabelle ist schreibgeschützt, nur das Ausführen von Auswahlmöglichkeiten ist in Ordnung. Kannst du vielleicht näher erläutern, was eine Aussicht ist? Was würde in meinem obigen Beispiel passieren? – JMD83

+1

@ JMD83 Wiews sind auf DB-Ebene erstellt, Sie brauchen sie wirklich nicht, es sei denn, einige Tabellen müssen verbunden werden. –

Verwandte Themen